<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('detalle_ventas', function (Blueprint $table) {
            // Primero hacer la columna nullable si no lo es
            $table->unsignedBigInteger('producto_id')->nullable()->change();
            
            // Eliminar la clave foránea existente (compatible con SQLite y MySQL)
            $table->dropForeign(['producto_id']);
            
            // Recrear la clave foránea con SET NULL
            $table->foreign('producto_id')
                  ->references('id')
                  ->on('productos')
                  ->onDelete('set null');
        });
        
        // También crear clave foránea para variante_id (no existe actualmente según la consulta)
        if (Schema::hasColumn('detalle_ventas', 'variante_id')) {
            Schema::table('detalle_ventas', function (Blueprint $table) {
                // variante_id ya es nullable
                
                // Crear la clave foránea con SET NULL (no existe actualmente)
                $table->foreign('variante_id')
                      ->references('id')
                      ->on('product_variants')
                      ->onDelete('set null');
            });
        }
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('detalle_ventas', function (Blueprint $table) {
            // Revertir las claves foráneas a RESTRICT
            $table->dropForeign(['producto_id']);
            $table->foreign('producto_id')
                  ->references('id')
                  ->on('productos')
                  ->onDelete('restrict');
                  
            if (Schema::hasColumn('detalle_ventas', 'variante_id')) {
                $table->dropForeign(['variante_id']);
                // No recrear variante_id foreign key en down ya que no existía originalmente
            }
            
            // Revertir producto_id a NOT NULL
            $table->unsignedBigInteger('producto_id')->nullable(false)->change();
        });
    }
};
