<?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/data через pgsql_supplier (как add_code_fields_to_email_verifications):
        // на dev = postgres superuser, на prod = crm_supplier_worker (BYPASSRLS) —
        // UPDATE users под RLS проходит без tenant-GUC.
        $supplier = DB::connection('pgsql_supplier');

        $default = <<<'JSON'
{
  "new_lead":         {"inapp": true,  "push": true,  "email": true},
  "reminder":         {"inapp": true,  "push": true,  "email": true},
  "low_balance":      {"email": true},
  "zero_balance":     {"email": true},
  "topup_success":    {"email": true},
  "invoice_paid":     {"email": true},
  "new_device_login": {"email": true},
  "marketing":        {"email": false}
}
JSON;

        $supplier->statement(
            "ALTER TABLE users ALTER COLUMN notification_preferences SET DEFAULT '".$default."'::jsonb"
        );

        // Дотяжка существующих: точечно (jsonb_set), только живые, только текущие false.
        $supplier->statement(<<<'SQL'
            UPDATE users
               SET notification_preferences = jsonb_set(notification_preferences, '{new_lead,email}', 'true'::jsonb)
             WHERE deleted_at IS NULL
               AND notification_preferences #> '{new_lead,email}' = 'false'::jsonb
            SQL);
    }

    public function down(): void
    {
        // Возвращаем только DEFAULT. Дотяжку назад НЕ откатываем: после флипа
        // «исходный false» и выставленный нами «true» неразличимы — откат был бы догадкой.
        $supplier = DB::connection('pgsql_supplier');

        $old = <<<'JSON'
{
  "new_lead":         {"inapp": true,  "push": true,  "email": false},
  "reminder":         {"inapp": true,  "push": true,  "email": true},
  "low_balance":      {"email": true},
  "zero_balance":     {"email": true},
  "topup_success":    {"email": true},
  "invoice_paid":     {"email": true},
  "new_device_login": {"email": true},
  "marketing":        {"email": false}
}
JSON;

        $supplier->statement(
            "ALTER TABLE users ALTER COLUMN notification_preferences SET DEFAULT '".$old."'::jsonb"
        );
    }
};
