<?php
declare(strict_types=1);

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

/**
 * Колонки lat/lon в cl_analytics_events — координаты города посетителя
 * (из mmdb DB-IP City Lite, резолв на сервере; IP не сохраняется). Нужны для
 * точных точек на карте. Идемпотентно и кросс-СУБД (прод MySQL, локалка PostgreSQL).
 */
return function (Schema $schema, Connection $conn): void {
    $table  = $conn->table('analytics_events');
    $driver = $conn->driver()->name();

    $has = function (string $col) use ($conn, $table, $driver): bool {
        if ($driver === 'pgsql') {
            $row = $conn->run(
                "SELECT 1 FROM information_schema.columns WHERE table_name = ? AND column_name = ? LIMIT 1",
                [$table, $col]
            )->fetch();
        } else {
            $row = $conn->run(
                "SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = ? AND column_name = ? LIMIT 1",
                [$table, $col]
            )->fetch();
        }
        return $row !== false && $row !== null;
    };

    foreach (['lat', 'lon'] as $col) {
        if (!$has($col)) {
            $conn->exec(
                'ALTER TABLE ' . $conn->table_q('analytics_events')
                . ' ADD COLUMN ' . $conn->quoteId($col) . ' DECIMAL(9,6)'
            );
        }
    }
};
