<?php
declare(strict_types=1);

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

/**
 * Добавляет колонку entity_type в celena_categories — теперь категория знает,
 * к какой сущности она относится: news (по умолчанию для совместимости),
 * page, shop_product (от плагина магазина) или любому слугу,
 * зарегистрированному через хук `categories.entities`.
 */
return function (Schema $schema, Connection $conn): void {
    $table = $conn->table('celena_categories');
    $driver = $conn->driver()->name();

    // Проверяем, существует ли уже колонка (миграция идемпотентна)
    if ($driver === 'pgsql') {
        $row = $conn->run(
            "SELECT 1 FROM information_schema.columns WHERE table_name = ? AND column_name = ? LIMIT 1",
            [$table, 'entity_type']
        )->fetch();
    } else {
        $row = $conn->run(
            "SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = ? AND column_name = ? LIMIT 1",
            [$table, 'entity_type']
        )->fetch();
    }
    if ($row !== false && $row !== null) {
        return;
    }

    $col = $conn->quoteId('entity_type');
    $tbl = $conn->table_q('celena_categories');

    // Добавляем колонку с дефолтом 'news' — чтобы существующие записи остались валидны.
    $conn->exec("ALTER TABLE $tbl ADD COLUMN $col VARCHAR(64) NOT NULL DEFAULT 'news'");

    // Индекс для быстрой фильтрации по сущности.
    $idx = $conn->quoteId($table . '_entity_type_idx');
    $conn->exec("CREATE INDEX $idx ON $tbl ($col)");
};
