<?php

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

return new class extends Migration
{
    /**
     * Actualizar tabla mant_aprobaciones y agregar campos a mant_programacion
     * Registra firma del jefe operativo y genera código QR
     */
    public function up(): void
    {
        // Si la tabla ya existe, solo agregar columnas faltantes
        if (Schema::hasTable('mant_aprobaciones')) {
            Schema::table('mant_aprobaciones', function (Blueprint $table) {
                if (!Schema::hasColumn('mant_aprobaciones', 'usuario_aprueba')) {
                    $table->unsignedBigInteger('usuario_aprueba')->nullable()->after('jefe_operativo_id')->comment('Jefe operativo que firma');
                }
                if (!Schema::hasColumn('mant_aprobaciones', 'firma_imagen')) {
                    $table->longText('firma_imagen')->nullable()->after('usuario_aprueba')->comment('Base64 de la firma');
                }
                if (!Schema::hasColumn('mant_aprobaciones', 'codigo_qr')) {
                    $table->string('codigo_qr', 100)->nullable()->after('firma_imagen')->comment('Código único para QR');
                }
                if (!Schema::hasColumn('mant_aprobaciones', 'url_reporte')) {
                    $table->string('url_reporte', 500)->nullable()->after('codigo_qr')->comment('URL del reporte PDF');
                }
                if (!Schema::hasColumn('mant_aprobaciones', 'observacion_aprobacion')) {
                    $table->text('observacion_aprobacion')->nullable()->after('url_reporte');
                }
                if (!Schema::hasColumn('mant_aprobaciones', 'dispositivo')) {
                    $table->string('dispositivo', 200)->nullable()->after('longitud')->comment('Info del dispositivo');
                }
                if (!Schema::hasColumn('mant_aprobaciones', 'created_at')) {
                    $table->timestamps();
                }
            });
        } else {
            // Crear tabla si no existe
            Schema::create('mant_aprobaciones', function (Blueprint $table) {
                $table->id('aprobacion_id');
                $table->unsignedBigInteger('prog_id')->comment('FK a mant_programacion');
                $table->unsignedBigInteger('usuario_aprueba')->comment('Jefe operativo que firma');
                $table->longText('firma_imagen')->nullable()->comment('Base64 de la firma');
                $table->datetime('fecha_aprobacion');
                $table->string('codigo_qr', 100)->unique()->comment('Código único para QR');
                $table->string('url_reporte', 500)->nullable()->comment('URL del reporte PDF');
                $table->text('observacion_aprobacion')->nullable();
                $table->decimal('latitud', 10, 8)->nullable()->comment('Ubicación GPS');
                $table->decimal('longitud', 11, 8)->nullable();
                $table->string('dispositivo', 200)->nullable()->comment('Info del dispositivo');
                $table->timestamps();

                // Foreign keys
                $table->foreign('prog_id')->references('prog_id')->on('mant_programacion')->onDelete('cascade');
                $table->foreign('usuario_aprueba')->references('id')->on('users')->onDelete('restrict');

                // Índices
                $table->index('codigo_qr');
                $table->index('fecha_aprobacion');
            });
        }

        // Agregar campos a mant_programacion si no existen
        if (!Schema::hasColumn('mant_programacion', 'aprobado')) {
            Schema::table('mant_programacion', function (Blueprint $table) {
                $table->boolean('aprobado')->default(false)->after('estado');
            });
        }

        if (!Schema::hasColumn('mant_programacion', 'fecha_aprobacion')) {
            Schema::table('mant_programacion', function (Blueprint $table) {
                $table->datetime('fecha_aprobacion')->nullable()->after('aprobado');
            });
        }
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        if (Schema::hasColumn('mant_programacion', 'aprobado')) {
            Schema::table('mant_programacion', function (Blueprint $table) {
                $table->dropColumn('aprobado');
            });
        }

        if (Schema::hasColumn('mant_programacion', 'fecha_aprobacion')) {
            Schema::table('mant_programacion', function (Blueprint $table) {
                $table->dropColumn('fecha_aprobacion');
            });
        }

        // No eliminar la tabla mant_aprobaciones porque ya existía
    }
};
