<?php

use App\Models\InvoiceBilling;
use Illuminate\Database\Migrations\Migration;

/**
 * PRC-1066 — Mevcut invoice_billings.settings satırlarındaki düz-metin sırları
 * (api_key/api_secret/client_secret/password/access_token/refresh_token) şifreler.
 *
 * EncryptedSettingsCast devreye girdikten SONRA çalışır: her satır model üzerinden
 * yeniden kaydedilir → cast set() hassas anahtarları şifreler. Şema DEĞİŞMEZ
 * (yalnız veri dönüşümü; json_valid CHECK korunur — sırlar JSON içinde şifreli).
 * Idempotent: cast zaten-şifreli değeri tekrar şifrelemez.
 */
return new class extends Migration
{
    public function up(): void
    {
        InvoiceBilling::query()->get()->each(function (InvoiceBilling $m) {
            // get() legacy plaintext döndürür (decrypt fail → ham); reassign +
            // saveQuietly cast set()'i tetikler → hassas anahtarlar şifrelenir.
            $settings = $m->settings;
            if (is_array($settings) && $settings !== []) {
                $m->settings = $settings;
                $m->saveQuietly();
            }
        });
    }

    public function down(): void
    {
        // Geri-dönüş: sırları düz-metne çevir (cast get zaten decrypt ediyor,
        // cast'i bypass ederek ham plaintext JSON yaz). Dev rollback için.
        InvoiceBilling::query()->get()->each(function (InvoiceBilling $m) {
            $plain = $m->settings; // cast get → decrypted plaintext array
            $attrs = $m->getAttributes();
            $attrs['settings'] = json_encode($plain);
            $m->setRawAttributes($attrs);
            $m->saveQuietly();
        });
    }
};
