<?php

declare(strict_types=1);

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

return new class extends Migration
{
    /**
     * Удаление legacy-артефактов прямого webhook-канала.
     *
     * Spec: docs/superpowers/specs/2026-05-24-legacy-direct-webhook-removal-design.md
     * Plan: docs/superpowers/plans/2026-05-24-legacy-direct-webhook-removal.md
     *
     * Что удаляем (финальный список по результатам Phase 1 impact-checks):
     *   - webhook_log (partitioned, 13 партиций) — пустая на проде, источник = только удалённый ProcessWebhookJob
     *   - rejected_deals_log — writer только ProcessWebhookJob, нет readers
     *   - tenants.webhook_token + tenants.webhook_token_rotated_at — нет в UI/API, тесты почищены ниже
     *   - system_settings.low_balance_threshold_leads (seed) — только legacy
     *
     * Phase 1 RED FLAG: webhook_dedup_keys ОСТАЁТСЯ (HistoricalImportService — CSV-канал).
     *
     * pgsql_supplier connection — BYPASSRLS-роль crm_supplier_worker (паттерн Спека B):
     * под обычной crm_app_user DROP/ALTER без app.current_tenant_id GUC не пройдёт.
     */
    public function up(): void
    {
        $conn = DB::connection('pgsql_supplier');

        // Partitioned table — DROP TABLE каскадит все 13 партиций.
        $conn->statement('DROP TABLE IF EXISTS webhook_log CASCADE');

        // NB: webhook_dedup_keys НЕ дропаем — Phase 1 RED FLAG, живой через HistoricalImportService (CSV-канал).

        // RejectedDealsLog — writer только удалённый ProcessWebhookJob, readers нет.
        $conn->statement('DROP TABLE IF EXISTS rejected_deals_log CASCADE');

        // tenants.webhook_token + webhook_token_rotated_at — нет в UI/API.
        $conn->statement('ALTER TABLE tenants DROP COLUMN IF EXISTS webhook_token, DROP COLUMN IF EXISTS webhook_token_rotated_at');

        // Legacy threshold-cross seed (caller — удалённый ProcessWebhookJob).
        $conn->statement("DELETE FROM system_settings WHERE key = 'low_balance_threshold_leads'");
    }

    /**
     * Откат — пустая заглушка. Прод-restore из pg_dump backup.
     * Этот метод существует только чтобы migrate:rollback не падал.
     */
    public function down(): void
    {
        // НЕ восстанавливаем структуру — пустая заглушка.
        // Прод-restore — из pg_dump backup (см. runbook docs/deploy/test-server-runbook.md).
    }
};
