<?php

namespace App\Http\Controllers;

use App\Models\Proceso;
use App\Services\PlantillaService;
use Illuminate\Http\Request;

class PlantillaController extends Controller
{
    /**
     * Generar y descargar PDF de una plantilla
     */
    public function generar(Proceso $proceso, string $tipo)
    {
        if (!auth()->user()->can('procesos.edit')) {
            abort(403);
        }

        $plantillas = PlantillaService::PLANTILLAS;
        if (!isset($plantillas[$tipo])) {
            abort(404, 'Plantilla no encontrada.');
        }

        // Validar estado del proceso
        if (!in_array($proceso->estado, $plantillas[$tipo]['requiere_estado'])) {
            return back()->with('error', "Esta plantilla no está disponible en el estado actual ({$proceso->estado_label}).");
        }

        $pdf = PlantillaService::generarPdf($proceso, $tipo);

        $filename = strtoupper(str_replace('_', '-', $tipo))
            . '_' . $proceso->radicado_interno
            . '_' . date('Ymd')
            . '.pdf';

        // Registrar en bitácora
        $proceso->actuaciones()->create([
            'user_id' => auth()->id(),
            'tipo' => 'otro',
            'titulo' => "Documento generado: {$plantillas[$tipo]['nombre']}",
            'descripcion' => "Plantilla '{$plantillas[$tipo]['nombre']}' generada automáticamente.",
            'fecha_actuacion' => now()->toDateString(),
            'es_automatica' => true,
        ]);

        return $pdf->stream($filename);
    }

    /**
     * Descargar PDF (forzar descarga en lugar de stream)
     */
    public function descargar(Proceso $proceso, string $tipo)
    {
        if (!auth()->user()->can('procesos.edit')) {
            abort(403);
        }

        $plantillas = PlantillaService::PLANTILLAS;
        if (!isset($plantillas[$tipo])) {
            abort(404);
        }

        $pdf = PlantillaService::generarPdf($proceso, $tipo);

        $filename = strtoupper(str_replace('_', '-', $tipo))
            . '_' . $proceso->radicado_interno
            . '_' . date('Ymd')
            . '.pdf';

        return $pdf->download($filename);
    }
}
