<?php

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

/**
 * PRC-863 — Ödenmeyen hizmet askıya alma/sonlandırma default'ları.
 *
 * `auto_suspension_days`/`auto_termination_days` nullable + DB default'suzdu.
 * Admin ürün oluştururken boş bırakınca null kalıyor; ProcessOverdueInvoicesCommand
 * + ProcessAutoTerminationCommand null'ı (=0) atlıyor → borçlu müşteri hiç askıya
 * alınmıyor (tahsilat deliği). PRC-641 global runtime fallback'i kaldırdı; bu yüzden
 * çözüm veri-katmanında güvenli default + null backfill (0 = kasıtlı-kapalı semantiği
 * korunur, admin isterse 0 verir).
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('products', function (Blueprint $table) {
            $table->integer('auto_suspension_days')->nullable()->default(14)->change();
            $table->integer('auto_termination_days')->nullable()->default(30)->change();
        });

        // Yapılandırılmamış (null) mevcut ürünleri güvenli default'a çek — null hiç
        // kasıtlı değildi (kasıtlı-kapalı = 0).
        DB::table('products')->whereNull('auto_suspension_days')->update(['auto_suspension_days' => 14]);
        DB::table('products')->whereNull('auto_termination_days')->update(['auto_termination_days' => 30]);
    }

    public function down(): void
    {
        Schema::table('products', function (Blueprint $table) {
            $table->integer('auto_suspension_days')->nullable()->default(null)->change();
            $table->integer('auto_termination_days')->nullable()->default(null)->change();
        });
    }
};
