<?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::create('lecturas_horometro', function (Blueprint $table) {
            $table->id();
            $table->foreignId('equipo_id')->constrained('equipos')->cascadeOnDelete();
            $table->dateTime('fecha_lectura');
            $table->decimal('horometro', 12, 2);
            $table->decimal('delta', 12, 2)->default(0)->comment('Horas operadas desde la lectura anterior');
            $table->text('observaciones')->nullable();
            $table->foreignId('usuario_id')->nullable()->constrained('usuarios')->nullOnDelete();
            $table->timestamps();
            $table->index(['equipo_id', 'fecha_lectura']);
        });

        // Cache rápido de "horómetro de la última PM ejecutada" por tipo, en cada equipo.
        // Evita recorrer todo el historial de OT cada vez que el comando se ejecuta.
        Schema::table('equipos', function (Blueprint $table) {
            $table->decimal('ultimo_pm_360', 12, 2)->nullable()->after('horometro_actual');
            $table->decimal('ultimo_pm_720', 12, 2)->nullable()->after('ultimo_pm_360');
            $table->decimal('ultimo_pm_4320', 12, 2)->nullable()->after('ultimo_pm_720');
            $table->decimal('ultimo_pm_8640', 12, 2)->nullable()->after('ultimo_pm_4320');
        });

        // Marcar en cada OT a qué umbral de PM corresponde (para no duplicar).
        Schema::table('ordenes_trabajo', function (Blueprint $table) {
            $table->string('pm_tipo', 10)->nullable()->after('clase')
                ->comment('360, 720, 4320, 8640 o NULL si no es por horas');
            $table->decimal('horometro_disparo', 12, 2)->nullable()->after('horometro_fin')
                ->comment('Horómetro en el momento que dispar\xC3\xB3 la OT');
        });
    }

    public function down(): void
    {
        Schema::table('ordenes_trabajo', function (Blueprint $table) {
            $table->dropColumn(['pm_tipo', 'horometro_disparo']);
        });
        Schema::table('equipos', function (Blueprint $table) {
            $table->dropColumn(['ultimo_pm_360', 'ultimo_pm_720', 'ultimo_pm_4320', 'ultimo_pm_8640']);
        });
        Schema::dropIfExists('lecturas_horometro');
    }
};
