<?php

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

return new class extends Migration
{
    public function up(): void
    {
        Schema::table('comprobantes', function (Blueprint $table) {
            $table->foreignId('venta_id')->nullable()->after('orden_id')->constrained('ventas')->nullOnDelete();

            // --- Snapshot del comprador al momento de emitir (no depende de que el cliente cambie después) ---
            $table->string('tipo_identificacion_comprador', 2)->nullable(); // 04=RUC, 05=Cédula, 06=Pasaporte, 07=Consumidor Final
            $table->string('identificacion_comprador')->nullable();
            $table->string('razon_social_comprador')->nullable();
            $table->string('direccion_comprador')->nullable();
            $table->string('email_comprador')->nullable();

            // --- Documento electrónico SRI ---
            $table->boolean('electronico')->default(false); // true = pasa por el flujo del SRI
            $table->string('cod_doc', 2)->default('01'); // 01 = Factura
            $table->unsignedTinyInteger('ambiente')->nullable(); // 1=Pruebas, 2=Producción (copiado de configuración al emitir)
            $table->string('clave_acceso', 49)->nullable()->unique();
            $table->string('secuencial', 9)->nullable(); // 000000123
            $table->string('numero_autorizacion')->nullable();
            $table->timestamp('fecha_autorizacion')->nullable();
            $table->enum('estado_sri', [
                'no_electronico', 'borrador', 'generado', 'firmado', 'enviado',
                'autorizado', 'no_autorizado', 'devuelta', 'rechazado', 'anulado_sri',
            ])->default('no_electronico');
            $table->text('mensaje_sri')->nullable(); // últimos mensajes/errores devueltos por el SRI

            $table->string('xml_generado_path')->nullable();
            $table->string('xml_firmado_path')->nullable();
            $table->string('xml_autorizado_path')->nullable();
        });
    }

    public function down(): void
    {
        Schema::table('comprobantes', function (Blueprint $table) {
            $table->dropConstrainedForeignId('venta_id');
            $table->dropColumn([
                'tipo_identificacion_comprador', 'identificacion_comprador', 'razon_social_comprador',
                'direccion_comprador', 'email_comprador', 'electronico', 'cod_doc', 'ambiente',
                'clave_acceso', 'secuencial', 'numero_autorizacion', 'fecha_autorizacion',
                'estado_sri', 'mensaje_sri', 'xml_generado_path', 'xml_firmado_path', 'xml_autorizado_path',
            ]);
        });
    }
};
