#!/usr/bin/env php
<?php

include $_composer_autoload_path ?? __DIR__ . '/../vendor/autoload.php';

try {
    $builder = new \VersionBuilder\Builder();
    $fileDetector = new \VersionBuilder\FileDetector($builder);
    $files = $fileDetector->getFiles();

    echo 'Starting Version Builder work:' . PHP_EOL;
    echo $fileDetector->getCommand() . PHP_EOL . PHP_EOL;
} catch (\Exception $e) {
    exit($e->getMessage() . PHP_EOL);
}

$directory = $builder->getPathDir() . '/' . $builder->getModuleVersion();
if (!file_exists($directory)) {
    if (!mkdir($directory, 0755, true)) {
        exit('Version Builder: Failed to create directory' . PHP_EOL);
    }
}

$archiveName = $builder->getPathDir() . '/' . $builder->getArchiveName();
if (file_exists($archiveName)) {
    unlink($archiveName);
}

$zip = new ZipArchive();
if ($zip->open($archiveName, ZipArchive::CREATE) !== true) {
    exit('Version Builder: Unable to open ' . $archiveName . PHP_EOL);
}

echo 'Files: ' . PHP_EOL;
foreach ($files as $file) {
    // Создание директории версии
    $destDir = $directory . '/' . dirname($file['path']);
    $destFile = $directory . '/' . $file['path'];
    if (!file_exists($destDir)) {
        if (!mkdir($destDir, 0755, true)) {
            exit('Version Builder: Failed to create directory ' . dirname($file['path']) . PHP_EOL);
        }
    }
    // Копируем файлы
    $needConvert = strpos($file['path'], 'lang/ru') !== false;
    $content = $needConvert ? iconv('UTF-8', 'CP1251', $file['content']) : $file['content'];
    file_put_contents($destFile, $content);
    // Добавляем файлы в архив
    if ($zip->addFile($destFile, $builder->getModuleVersion() . '/' . $file['path'])) {
        echo $file['path'] . PHP_EOL;
    }
}

echo PHP_EOL;
echo 'Result: ' . PHP_EOL;

$description = $builder->getDescriptionUpdate();
$zip->addFromString($builder->getModuleVersion() . '/description.ru', iconv('UTF-8', 'CP1251', $description));
if (!$zip->close()) {
    exit('Version Builder: Build version NOT created' . PHP_EOL);
} else {
    echo 'Version Builder: Archive created ' . $builder->getArchiveName() . ' successfully' . PHP_EOL;
}

\VersionBuilder\Helper::removeDirectory($directory);
echo 'Version Builder: Time ' . round(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'], 6) . ' sec.' . PHP_EOL;
echo PHP_EOL;
