<?php

declare(strict_types=1);

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

return new class extends Migration
{
    public function up(): void
    {
        // G3: фича «Напоминания» удалена из продукта. RLS-политика и индексы
        // (idx_reminders_*) уходят каскадом вместе с таблицей.
        Schema::dropIfExists('reminders');
    }

    public function down(): void
    {
        DB::statement(<<<'SQL'
        CREATE TABLE reminders (
            id              BIGSERIAL PRIMARY KEY,
            tenant_id       BIGINT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
            deal_id         BIGINT NOT NULL,                       -- БЕЗ FK (deals партиционирована)
            text            VARCHAR(255),                          -- = note в оригинале, лимит 255
            remind_at       TIMESTAMPTZ NOT NULL,
            created_by      BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
                                                                   -- = histories[].from в оригинале
            assignee_id     BIGINT REFERENCES users(id),           -- зарезервировано (= to, всегда NULL
                                                                   -- в оригинале, наше расширение Post-MVP)
            completed_at    TIMESTAMPTZ,                           -- NULL = активное; not NULL = выполнено
                                                                   -- (наше расширение, в оригинале нет)
            is_sent         BOOLEAN DEFAULT FALSE,                 -- для cron уведомлений
            sent_at         TIMESTAMPTZ,
            created_at      TIMESTAMPTZ DEFAULT NOW(),
            updated_at      TIMESTAMPTZ
        );
        SQL);

        DB::statement(<<<'SQL'
        CREATE INDEX idx_reminders_due
            ON reminders(remind_at)
            WHERE is_sent = FALSE AND completed_at IS NULL;
        SQL);

        DB::statement(<<<'SQL'
        CREATE INDEX idx_reminders_deal
            ON reminders(deal_id);
        SQL);

        DB::statement(<<<'SQL'
        CREATE INDEX idx_reminders_tenant_user_active
            ON reminders(tenant_id, created_by, remind_at)
            WHERE completed_at IS NULL;
        SQL);

        DB::statement(<<<'SQL'
        CREATE INDEX idx_reminders_tenant_active
            ON reminders(tenant_id, remind_at)
            WHERE completed_at IS NULL;
        SQL);

        DB::statement(<<<'SQL'
        ALTER TABLE reminders ENABLE ROW LEVEL SECURITY;
        SQL);

        DB::statement(<<<'SQL'
        CREATE POLICY tenant_isolation ON reminders USING (tenant_id = current_setting('app.current_tenant_id')::bigint);
        SQL);
    }
};
