<?php

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

/**
 * Welche Mahnstufen dem Kunden tatsächlich mitgeteilt wurden.
 *
 * Codex-Review 31.7.2026, P2: der Fall rückte weiter, die Mail scheiterte, und
 * kein späterer Lauf holte sie nach — der Kunde wurde gemahnt und später
 * abgeschaltet, ohne es je erfahren zu haben. Ohne diese Liste liess sich das
 * auch nicht nachträglich feststellen: eine nicht verschickte Mail hinterlässt
 * nirgends eine Spur.
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('dunning_cases', function (Blueprint $table) {
            $table->json('notified_levels')->nullable()->after('fee_invoice_ids');
        });

        // Bestehende Fälle nachtragen.
        //
        // Ohne das hielte der erste Lauf nach dem Update JEDE Nachricht für
        // verloren und schickte sie erneut — auch Sperrmitteilungen, an Kunden,
        // die sie längst bekommen haben. Ein Fall, der Stufe 3 erreicht hat,
        // hat 0 bis 3 bekommen; das ist die einzige Annahme, die hier möglich
        // ist, und sie ist die richtige: der Lauf, der die Stufe gesetzt hat,
        // hat auch die Mail eingereiht.
        foreach (DB::table('dunning_cases')->select('id', 'level')->get() as $case) {
            DB::table('dunning_cases')
                ->where('id', $case->id)
                ->update(['notified_levels' => json_encode(range(0, (int) $case->level))]);
        }
    }

    public function down(): void
    {
        Schema::table('dunning_cases', function (Blueprint $table) {
            $table->dropColumn('notified_levels');
        });
    }
};
