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

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

$builder = new \VersionBuilder\Builder();

if (!count($hashes = $builder->getHashesBetweenLastTags())) {
    exit('Version Builder Warning: No tags to create build version' . PHP_EOL);
}

if (!count($files = $builder->getFilesBetweenHash($hashes['prev'], $hashes['curr']))) {
    exit('Version Builder Warning: No changed files to create build version' . PHP_EOL);
}

$version = $builder->getCurrentModuleVersion();
$directory = $builder->getPath() . '/.versions/' . $version;

if (empty($version)) {
    exit('Version Builder Error: Module version not specified in /install/version.php' . PHP_EOL);
}

if (!file_exists($directory)) {
    if (!mkdir($directory, 0755, true)) {
        exit('Version Builder Error: Failed to create directory' . PHP_EOL);
    }
}

$archiveName = $builder->getPath() . '/.versions/' . $version . '.zip';
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);
}

foreach ($files as $file) {
    // Создание директории версии
    $destDir = $builder->getPath() . '/.versions/' . $version . '/' . dirname($file);
    $destFile = $builder->getPath() . '/.versions/' . $version . '/' . $file;
    if (!file_exists($destDir)) {
        if (!mkdir($destDir, 0755, true)) {
            exit('Version Builder Error: Failed to create directory ' . dirname($file) . PHP_EOL);
        }
    }
    // Конвертация в cp1251
    if (stripos($file, 'lang/ru') !== false) {
        $content = file_get_contents($builder->getPath() . '/' . $file);
        $content = iconv('UTF-8', 'CP1251', $content);
        file_put_contents($destFile, $content);
    } else {
        copy($builder->getPath() . '/' . $file, $destFile);
    }
    // Добавление файла в архив
    $zip->addFile($destFile, $version . '/' . $file);
}

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

$builder->removeDirectory($directory);
exit('Version Builder: Build version created successfully ' . PHP_EOL);
