<?php

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

/**
 * Satış kalemlerine tarih penceresi.
 *
 * Kişiye özel satışlarda ürün kataloğunda kayıtlı bir kalkış olmayabilir;
 * kullanıcı satırın tarihini doğrudan girer. Bu tarihler acente takviminde
 * görünür, tur ürünlerinde ise özel kalkışa (private departure) dönüşerek
 * operasyon modülüne düşer — bkz. PrivateDepartureService.
 *
 * departure_type/departure_id: bu kalemden üretilen özel kalkışın izi.
 * Kalem silinince / tarihi boşalınca kalkış da temizlenir.
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('sale_items', function (Blueprint $table) {
            $table->date('start_date')->nullable()->after('currency');
            $table->date('end_date')->nullable()->after('start_date');
            $table->time('start_time')->nullable()->after('end_date');
            $table->time('end_time')->nullable()->after('start_time');

            $table->string('departure_type')->nullable()->after('end_time');
            $table->unsignedBigInteger('departure_id')->nullable()->after('departure_type');

            $table->index(['sale_id', 'start_date'], 'sale_items_sale_start_idx');
            $table->index(['departure_type', 'departure_id'], 'sale_items_departure_idx');
        });
    }

    public function down(): void
    {
        Schema::table('sale_items', function (Blueprint $table) {
            $table->dropIndex('sale_items_sale_start_idx');
            $table->dropIndex('sale_items_departure_idx');
            $table->dropColumn([
                'start_date', 'end_date', 'start_time', 'end_time',
                'departure_type', 'departure_id',
            ]);
        });
    }
};
