<?php
namespace App\Services;

use TCPDF;
use App\Models\Assignment;
use App\Models\Schedule;

/**
 * Servicio para generación de PDFs
 */
class PDFService
{
    private $assignmentModel;
    private $scheduleModel;
    
    public function __construct()
    {
        $this->assignmentModel = new Assignment();
        $this->scheduleModel = new Schedule();
    }
    
    /**
     * Genera el PDF con rotaciones y horarios
     * 
     * @param string $outputMode 'D' para descarga, 'F' para guardar archivo (path), 'I' para browser inline
     * @param string $savePath Ruta donde guardar si mode es 'F'
     * @return string|void
     */
    public function generate($outputMode = 'D', $savePath = '')
    {
        // Crear instancia TCPDF
        $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
        
        // Configuración del documento
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor('Sistema Contenedor Ibiza');
        $pdf->SetTitle('Rotación de Ayudantes y Horarios');
        
        // Quitar cabeceras y pies de página default
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);
        
        // Márgenes
        $pdf->SetMargins(15, 15, 15);
        
        // Agregar página
        $pdf->AddPage();
        
        // --- TÍTULO ---
        $pdf->SetFont('helvetica', 'B', 20);
        $pdf->Cell(0, 10, 'Control de Contenedor de Basura', 0, 1, 'C');
        $pdf->SetFont('helvetica', '', 12);
        $pdf->Cell(0, 10, 'Generado el: ' . date('d/m/Y H:i'), 0, 1, 'C');
        $pdf->Ln(5);
        
        // --- TABLA DE HORARIOS ---
        $pdf->SetFont('helvetica', 'B', 14);
        $pdf->Cell(0, 10, 'Horarios de Apertura', 0, 1, 'L');
        $pdf->Ln(2);
        
        $schedules = $this->scheduleModel->getAll();
        
        // Cabecera tabla horarios
        $pdf->SetFont('helvetica', 'B', 11);
        $pdf->SetFillColor(230, 230, 230);
        
        $colWidth = 180 / 7;
        
        $days = ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'];
        
        // Días
        foreach ($days as $day) {
            $pdf->Cell($colWidth, 8, $day, 1, 0, 'C', 1);
        }
        $pdf->Ln();
        
        // Horarios Turno 1
        $pdf->SetFont('helvetica', '', 10);
        foreach ($schedules as $sch) {
            $time = $sch['opening_time_1'] ? substr($sch['opening_time_1'], 0, 5) : '-';
            $pdf->Cell($colWidth, 8, $time, 1, 0, 'C');
        }
        $pdf->Ln();
        
        // Horarios Turno 2
        foreach ($schedules as $sch) {
            $time = $sch['opening_time_2'] ? substr($sch['opening_time_2'], 0, 5) : '-';
            $text = (!$sch['opening_time_1'] && !$sch['opening_time_2']) ? 'Cerrado' : $time;
            
            // Si dice Cerrado, que ocupe el espacio o sea visible
            if ($text == 'Cerrado') {
                // Ya se pintó arriba un guión, aquí ponemos Cerrado? O mejor estructura
                // Recalculando lógica visual... 
                // Mejor: Fila 1 = Turno Mañana/Tarde 1, Fila 2 = Turno Tarde/Noche 2
            }
            $pdf->Cell($colWidth, 8, $text, 1, 0, 'C');
        }
        $pdf->Ln(15);
        
        // --- TABLA DE ROTACIÓN ---
        $pdf->SetFont('helvetica', 'B', 14);
        $pdf->Cell(0, 10, 'Rotación de Ayudantes (Próximas Semanas)', 0, 1, 'L');
        $pdf->Ln(2);
        
        $assignments = $this->assignmentModel->getUpcoming(12); // Mostrar 12 semanas
        
        // Cabecera tabla rotación
        $pdf->SetFont('helvetica', 'B', 11);
        
        $pdf->Cell(30, 10, 'Semana y Año', 1, 0, 'C', 1);
        $pdf->Cell(90, 10, 'Ayudante Asignado', 1, 0, 'C', 1);
        $pdf->Cell(60, 10, 'Periodo', 1, 1, 'C', 1);
        
        $pdf->SetFont('helvetica', '', 11);
        
        foreach ($assignments as $asg) {
            $periodo = date('d/m', strtotime($asg['start_date'])) . ' - ' . date('d/m', strtotime($asg['end_date']));
            $semTxt = "Sem " . $asg['week_number']; // . " (" . $asg['year'] . ")";
            
            $pdf->Cell(30, 8, $semTxt, 1, 0, 'C');
            $pdf->Cell(90, 8, $asg['full_name'], 1, 0, 'L');
            $pdf->Cell(60, 8, $periodo, 1, 1, 'C');
        }
        
        // Output
        if ($outputMode == 'F') {
            $pdf->Output($savePath, 'F');
            return $savePath;
        } else {
            $pdf->Output('rotacion-contenedor.pdf', $outputMode);
        }
    }
}
