<?php

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

/**
 * Faturalama genişletmesi:
 * - sale_id nullable → genel faturalar modülünden satışa bağlı olmayan fatura kesilebilir
 * - customer_id + billing_type + billing_snapshot → şirket/şahıs seçimi ve fatura bilgisi anlık görüntüsü
 *   (müşteri fatura bilgisi girmemişse TC kimlik no'ya kesilir)
 * - items JSON → fatura kalemleri (satıştan gelir, fatura içinde düzenlenebilir)
 * - subtotal / discount_total / tax_total → kalem kırılımı toplamları
 * - agencies.invoice_template → ayarlardan düzenlenebilir HTML fatura şablonu
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('sale_invoices', function (Blueprint $t) {
            $t->unsignedBigInteger('sale_id')->nullable()->change();
            $t->unsignedBigInteger('customer_id')->nullable()->after('sale_id');
            $t->string('billing_type', 20)->default('individual')->after('invoice_type'); // individual | company
            $t->json('billing_snapshot')->nullable()->after('billing_type');
            $t->json('items')->nullable()->after('billing_snapshot');
            $t->decimal('subtotal', 12, 2)->default(0)->after('items');
            $t->decimal('discount_total', 12, 2)->default(0)->after('subtotal');
            $t->decimal('tax_total', 12, 2)->default(0)->after('discount_total');

            $t->index(['agency_id', 'issue_date']);
            $t->index('customer_id');
        });

        Schema::table('agencies', function (Blueprint $t) {
            $t->longText('invoice_template')->nullable()->after('iban');
        });
    }

    public function down(): void
    {
        Schema::table('sale_invoices', function (Blueprint $t) {
            $t->dropIndex(['agency_id', 'issue_date']);
            $t->dropIndex(['customer_id']);
            $t->dropColumn(['customer_id', 'billing_type', 'billing_snapshot', 'items', 'subtotal', 'discount_total', 'tax_total']);
        });

        Schema::table('agencies', function (Blueprint $t) {
            $t->dropColumn('invoice_template');
        });
    }
};
