<?php

declare(strict_types=1);

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

return new class extends Migration
{
    public function up(): void
    {
        // DDL через pgsql_supplier (как tenant_requisites): prod-роли + избегаем
        // смешивания соединений. На dev/testing pgsql_supplier = postgres superuser.
        $supplier = DB::connection('pgsql_supplier');

        // 1) Защита-в-глубину: RLS на tenants (ключ — id, не tenant_id). Политика
        //    самоизоляции — под crm_app_user видна только своя компания. Админка
        //    (crm_admin_user) и онбординг (pgsql_supplier) — BYPASSRLS, их не задевает.
        //    USING-only (как project_routing_snapshots): хватает для фильтрации
        //    SELECT/UPDATE собственной строки; INSERT новой компании идёт под BYPASSRLS.
        //    CREATE POLICY IF NOT EXISTS в PG нет → дроп-перед-созданием (idempotent
        //    поверх schema.sql-базы, которую migrate:fresh грузит первой).
        $supplier->unprepared(<<<'SQL'
            ALTER TABLE tenants ENABLE ROW LEVEL SECURITY;
            DROP POLICY IF EXISTS tenants_self_isolation ON tenants;
            CREATE POLICY tenants_self_isolation
                ON tenants
                USING (id = current_setting('app.current_tenant_id', true)::bigint);
        SQL);

        // 2) project_routing_snapshots.created_at: TIMESTAMP → TIMESTAMPTZ
        //    (squawk prefer-timestamptz). На партиционированной таблице это переписывает
        //    партиции под ACCESS EXCLUSIVE — катить в окно низкой нагрузки. Существующие
        //    наивные значения (DEFAULT NOW() писал в зоне сервера) трактуем как UTC.
        $supplier->unprepared(<<<'SQL'
            ALTER TABLE project_routing_snapshots
                ALTER COLUMN created_at TYPE TIMESTAMPTZ USING created_at AT TIME ZONE 'UTC';
        SQL);
    }

    public function down(): void
    {
        $supplier = DB::connection('pgsql_supplier');

        $supplier->unprepared(<<<'SQL'
            DROP POLICY IF EXISTS tenants_self_isolation ON tenants;
            ALTER TABLE tenants DISABLE ROW LEVEL SECURITY;
            ALTER TABLE project_routing_snapshots
                ALTER COLUMN created_at TYPE TIMESTAMP USING created_at AT TIME ZONE 'UTC';
        SQL);
    }
};
