<?php

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

/**
 * Tabla de solicitudes para el módulo de Mantenimiento.
 * Incluye los campos base de SISER + campos específicos del formulario FOR-DMPE-008:
 * tipo_mantenimiento, equipo, serial, placa, tipo_falla, condicion_equipo, genera_odt, descripcion_falla.
 */
return new class extends Migration {
    public function up(): void
    {
        Schema::create('solicitudes', function (Blueprint $table) {
            $table->id();
            $table->string('numero')->unique(); // MAN-2026-XXXX
            $table->unsignedBigInteger('usuario_id');       // FK lógica → siser.users
            $table->unsignedBigInteger('departamento_id');  // FK lógica → siser.departamentos
            $table->unsignedBigInteger('area_trabajo_id')->nullable(); // FK lógica → siser.area_trabajos
            $table->text('descripcion');                    // Descripción de la falla / requerimiento
            $table->text('servicio_solicitado')->nullable(); // Trabajo solicitado
            $table->text('motivo_requerimiento')->nullable();
            $table->text('observaciones')->nullable();
            $table->string('estado')->default('I'); // (I)ngreso, (A)signada, (EE), (CO), (CF), (CE)
            $table->string('archivo_adjunto')->nullable();
            $table->integer('calificacion')->nullable();

            // ── Campos específicos de Mantenimiento (FOR-DMPE-008) ──────────
            $table->string('tipo_mantenimiento')->nullable();  // Preventivo, Correctivo, Revisión, Predictivo
            $table->string('equipo')->nullable();              // Nombre/Modelo del equipo
            $table->string('serial')->nullable();              // Serial de fábrica
            $table->string('placa')->nullable();               // Número de placa/activo fijo
            $table->string('tipo_falla')->nullable();          // Mecánica, Neumática, Hidráulica, Eléctrica
            $table->string('condicion_equipo')->nullable();    // Operativo, Averiado
            $table->boolean('genera_odt')->nullable();         // ¿Genera Orden de Trabajo?
            $table->text('descripcion_falla')->nullable();     // Descripción detallada de la falla

            $table->softDeletes();
            $table->timestamps();

            // Índices para rendimiento
            $table->index('estado');
            $table->index('usuario_id');
            $table->index('departamento_id');
            $table->index('numero');
        });
    }

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