<?php
declare(strict_types=1);

use Celena\Core\Database\Connection;
use Celena\Core\Database\Schema;

/**
 * Добавляет nullable-колонку city в cl_analytics_events.
 * Город НЕ резолвится локальной базой (её нет — это было бы тяжело): он приходит
 * из upstream-заголовка фронта (nginx geoip2 / Cloudflare), если тот настроен.
 * Нет заголовка → город пустой, аналитика работает по стране как прежде.
 * Идемпотентно и кросс-СУБД (прод MySQL, локалка PostgreSQL).
 */
return function (Schema $schema, Connection $conn): void {
    $table  = $conn->table('analytics_events');
    $driver = $conn->driver()->name();

    if ($driver === 'pgsql') {
        $exists = $conn->run(
            "SELECT 1 FROM information_schema.columns WHERE table_name = ? AND column_name = 'city' LIMIT 1",
            [$table]
        )->fetch();
    } else {
        $exists = $conn->run(
            "SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = ? AND column_name = 'city' LIMIT 1",
            [$table]
        )->fetch();
    }

    if (!$exists) {
        $conn->exec(
            'ALTER TABLE ' . $conn->table_q('analytics_events')
            . ' ADD COLUMN ' . $conn->quoteId('city') . ' VARCHAR(120)'
        );
    }
};
