<?php

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

/**
 * Satışa çoklu müşteri.
 *
 * sales.customer_id KALDIRILMAZ — birincil müşteri (fatura muhatabı ve mevcut
 * tüm sorgular ona bağlı) orada kalır; pivotta aynı kayıt is_primary = true olarak
 * durur. Kural: bir satışta ya TEK şirket ya da BİR VEYA DAHA FAZLA kişi olur.
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::create('sale_customers', function (Blueprint $table) {
            $table->id();
            $table->foreignId('sale_id')->constrained('sales')->cascadeOnDelete();
            $table->foreignId('customer_id')->constrained('customers')->cascadeOnDelete();
            $table->boolean('is_primary')->default(false);
            $table->timestamps();

            $table->unique(['sale_id', 'customer_id'], 'sale_customers_pair_uq');
            $table->index(['customer_id'], 'sale_customers_customer_idx');
        });

        // Mevcut satışların birincil müşterisini pivota taşı (geriye dönük tutarlılık)
        DB::table('sales')
            ->whereNotNull('customer_id')
            ->orderBy('id')
            ->select('id', 'customer_id')
            ->chunk(500, function ($sales) {
                $now = now();
                $rows = [];
                foreach ($sales as $s) {
                    $rows[] = [
                        'sale_id' => $s->id,
                        'customer_id' => $s->customer_id,
                        'is_primary' => true,
                        'created_at' => $now,
                        'updated_at' => $now,
                    ];
                }
                if ($rows) {
                    DB::table('sale_customers')->insertOrIgnore($rows);
                }
            });
    }

    public function down(): void
    {
        Schema::dropIfExists('sale_customers');
    }
};
