<?php

require_once __DIR__ . '/../config/database.php';

echo "===========================================\n";
echo "  AETERNA - Система миграций базы данных\n";
echo "===========================================\n\n";

try {
    $db = Database::getInstance()->getConnection();
    echo "[OK] Подключение к базе данных успешно\n\n";

    $db->exec("
        CREATE TABLE IF NOT EXISTS migrations (
            id SERIAL PRIMARY KEY,
            filename VARCHAR(255) NOT NULL UNIQUE,
            applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
    ");
    echo "[OK] Таблица migrations готова\n";

    $stmt = $db->query("SELECT filename FROM migrations ORDER BY filename");
    $applied = $stmt->fetchAll(PDO::FETCH_COLUMN);
    echo "[INFO] Уже применено миграций: " . count($applied) . "\n\n";

    $migrationFiles = glob(__DIR__ . '/*.sql');
    sort($migrationFiles);

    $newMigrations = 0;

    foreach ($migrationFiles as $file) {
        $filename = basename($file);

        if ($filename === 'seed_data.sql') {
            continue;
        }

        if (in_array($filename, $applied)) {
            echo "[SKIP] $filename (уже применена)\n";
            continue;
        }

        echo "[RUN] Применяю $filename... ";

        $sql = file_get_contents($file);

        try {
            $db->exec($sql);

            $stmt = $db->prepare("INSERT INTO migrations (filename) VALUES (?)");
            $stmt->execute([$filename]);

            echo "OK\n";
            $newMigrations++;
        } catch (PDOException $e) {
            echo "ОШИБКА!\n";
            echo "   Причина: " . $e->getMessage() . "\n";
            echo "\n[!] Миграция остановлена из-за ошибки\n";
            exit(1);
        }
    }

    echo "\n-------------------------------------------\n";

    if ($newMigrations > 0) {
        echo "[SUCCESS] Применено новых миграций: $newMigrations\n";
    } else {
        echo "[INFO] Все миграции уже применены\n";
    }

    $seedFile = __DIR__ . '/seed_data.sql';
    if (file_exists($seedFile)) {
        echo "\n[?] Хотите загрузить начальные данные (seed_data.sql)?\n";
        echo "    Запустите: php migrations/migrate.php --seed\n";

        if (isset($argv[1]) && $argv[1] === '--seed') {
            echo "\n[RUN] Загружаю seed_data.sql... ";
            try {
                $sql = file_get_contents($seedFile);
                $db->exec($sql);
                echo "OK\n";
            } catch (PDOException $e) {
                echo "ОШИБКА: " . $e->getMessage() . "\n";
            }
        }
    }

    echo "\n===========================================\n";
    echo "  Миграции завершены!\n";
    echo "===========================================\n";

} catch (PDOException $e) {
    echo "[ERROR] Ошибка подключения к БД: " . $e->getMessage() . "\n";
    exit(1);
}
