<?php
declare(strict_types=1);

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

/**
 * Счётчик просмотров публичной страницы товара. Инкрементится в
 * ShopController::product() при каждом GET /shop/product/{slug}.
 * В админке выводится в списке товаров — клик по числу открывает
 * товар на сайте в новой вкладке.
 */
return function (Schema $schema, Connection $conn): void {
    $driver = $conn->driver()->name();

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

    if (!$hasColumn('shop_products', 'views')) {
        $tbl = $conn->table_q('shop_products');
        $col = $conn->quoteId('views');
        $conn->exec("ALTER TABLE $tbl ADD COLUMN $col INT NOT NULL DEFAULT 0");
    }
};
