<?php

namespace App\Console\Commands;

use App\Models\Cotizacion;
use Illuminate\Console\Command;

class CheckMesaComprasTimers extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'app:check-mesa-compras-timers';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Revisa los tiempos de proforma (IMPAR u otros) y genera recordatorios si superan las 4.5 o 5 horas.';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $cotizaciones = Cotizacion::where('estado', 'pendiente')
            ->whereNotNull('fecha_envio')
            ->with('caso')
            ->get();

        foreach ($cotizaciones as $cot) {
            $minutosTranscurridos = now()->diffInMinutes($cot->fecha_envio);

            // 4.5 horas = 270 minutos
            if ($minutosTranscurridos >= 270 && $minutosTranscurridos < 300) {
                // Verificar si ya se envió la notificación de 4.5h
                $existe = $cot->caso->notificaciones()
                    ->where('tipo', 'recordatorio_proforma_4_5h')
                    ->whereJsonContains('data->cotizacion_id', $cot->id)
                    ->exists();

                if (! $existe) {
                    $cot->caso->notificaciones()->create([
                        'tipo' => 'recordatorio_proforma_4_5h',
                        'mensaje' => 'Recordatorio: Han pasado 4 horas y 30 minutos desde la solicitud de cotización al proveedor.',
                        'data' => ['cotizacion_id' => $cot->id],
                    ]);
                    $this->info("Notificación 4.5h enviada para caso {$cot->caso->numero_reclamo}");
                }
            }

            // 5 horas = 300 minutos, y cada 30 min (+30, +60, etc.)
            if ($minutosTranscurridos >= 300) {
                // Calculamos cuantos bloques de 30 mins han pasado desde las 5h
                $minutosExtra = $minutosTranscurridos - 300;
                $ciclo = floor($minutosExtra / 30); // 0 (5h), 1 (5.5h), 2 (6h), etc.

                $existe = $cot->caso->notificaciones()
                    ->where('tipo', 'recordatorio_proforma_30m')
                    ->whereJsonContains('data->cotizacion_id', $cot->id)
                    ->whereJsonContains('data->ciclo', $ciclo)
                    ->exists();

                if (! $existe) {
                    $cot->caso->notificaciones()->create([
                        'tipo' => 'recordatorio_proforma_30m',
                        'mensaje' => 'Recordatorio recurrente: Sin respuesta del proveedor (+'.($ciclo * 30 + 300).' mins).',
                        'data' => ['cotizacion_id' => $cot->id, 'ciclo' => $ciclo],
                    ]);
                    $this->info("Notificación >5h (ciclo {$ciclo}) enviada para caso {$cot->caso->numero_reclamo}");
                }
            }
        }
    }
}
