<?php
/**
 * ASISMA CRM - PdfHelper
 * Generador de Cotizaciones PDF Premium usando FPDF
 */

require_once ROOT_DIR . '/app/libraries/fpdf.php';

class PdfHelper extends FPDF {
    private $data = [];
    private $colors = [
        'primary' => [14, 140, 235],    // Brand Blue #0e8ceb
        'secondary' => [79, 70, 229],   // Indigo 600
        'text' => [30, 41, 59],         // Slate 800
        'light' => [100, 116, 139],     // Slate 500
        'bg' => [248, 250, 252]         // Slate 50
    ];

    public function setData($data) {
        $this->data = $data;
    }

    function Header() {
        // Título de la sección
        $this->SetFont('Arial', 'B', 15);
        $this->SetTextColor($this->colors['primary'][0], $this->colors['primary'][1], $this->colors['primary'][2]);
        $this->Cell(0, 10, utf8_decode('COTIZACIÓN COMERCIAL'), 0, 0, 'R');
        $this->Ln(15);
        
        // Línea decorativa
        $this->SetDrawColor($this->colors['primary'][0], $this->colors['primary'][1], $this->colors['primary'][2]);
        $this->SetLineWidth(0.8);
        $this->Line(10, 22, 200, 22);
        $this->Ln(5);
    }

    function Footer() {
        $this->SetY(-25);
        $this->SetFont('Arial', 'I', 8);
        $this->SetTextColor($this->colors['light'][0], $this->colors['light'][1], $this->colors['light'][2]);
        
        $this->Cell(0, 5, utf8_decode('ASISMA CRM - Plataforma Comercial Multi-Franquicia'), 0, 1, 'C');
        $this->Cell(0, 5, utf8_decode('Página ') . $this->PageNo() . ' de {nb}', 0, 0, 'C');
    }

    public function renderQuotation() {
        $this->AliasNbPages();
        $this->AddPage();
        $this->SetFont('Arial', '', 10);
        $this->SetTextColor($this->colors['text'][0], $this->colors['text'][1], $this->colors['text'][2]);

        // --- INFO CLIENTE & COTIZACIÓN ---
        $this->SetFont('Arial', 'B', 11);
        $this->Cell(100, 7, utf8_decode('Información del Cliente:'), 0, 0);
        $this->Cell(90, 7, utf8_decode('Detalle de Cotización:'), 0, 1);
        
        $this->SetFont('Arial', '', 10);
        
        // Fila 1
        $this->Cell(100, 6, utf8_decode('Razón Social: ' . $this->data['cliente_razon_social']), 0, 0);
        $this->Cell(90, 6, utf8_decode('Cotización N°: COT-' . str_pad($this->data['id'], 6, '0', STR_PAD_LEFT)), 0, 1);
        
        // Fila 2
        $this->Cell(100, 6, utf8_decode('RUT: ' . $this->data['cliente_rut']), 0, 0);
        $this->Cell(90, 6, utf8_decode('Fecha Emisión: ' . date('d-m-Y', strtotime($this->data['created_at']))), 0, 1);

        // Fila 3
        $this->Cell(100, 6, utf8_decode('Contacto: ' . $this->data['cliente_contacto_nombre']), 0, 0);
        $this->Cell(90, 6, utf8_decode('Válido Hasta: ' . date('d-m-Y', strtotime($this->data['vencimiento_at']))), 0, 1);

        // Fila 4
        $this->Cell(100, 6, utf8_decode('Correo: ' . $this->data['cliente_contacto_correo']), 0, 0);
        $this->Cell(90, 6, utf8_decode('Ejecutivo: ' . $this->data['ejecutivo_nombre']), 0, 1);
        
        $this->Ln(8);

        // --- PRODUCTOS ---
        $this->SetFillColor($this->colors['primary'][0], $this->colors['primary'][1], $this->colors['primary'][2]);
        $this->SetTextColor(255, 255, 255);
        $this->SetFont('Arial', 'B', 10);
        
        // Cabeceras de tabla
        $this->Cell(100, 8, utf8_decode('Producto / Concepto'), 1, 0, 'L', true);
        $this->Cell(20, 8, utf8_decode('Cant.'), 1, 0, 'C', true);
        $this->Cell(35, 8, utf8_decode('P. Unitario'), 1, 0, 'R', true);
        $this->Cell(35, 8, utf8_decode('Total'), 1, 1, 'R', true);

        $this->SetTextColor($this->colors['text'][0], $this->colors['text'][1], $this->colors['text'][2]);
        $this->SetFont('Arial', '', 9);

        // Cargar productos desde JSON
        $productos = [];
        if (is_string($this->data['productos_json'])) {
            $productos = json_decode($this->data['productos_json'], true) ?: [];
        } elseif (is_array($this->data['productos_json'])) {
            $productos = $this->data['productos_json'];
        }

        $moneda = isset($this->data['moneda']) ? $this->data['moneda'] : 'CLP';

        foreach ($productos as $p) {
            $nombre = isset($p['nombre'])   ? $p['nombre']   : '';
            $cant   = (int)(isset($p['cantidad']) ? $p['cantidad'] : 1);
            $precio = (float)(isset($p['precio']) ? $p['precio']   : 0);
            $itemEsUf = isset($p['moneda']) && $p['moneda'] === 'UF';
            // Total del item siempre en CLP (los UF vienen convertidos)
            $total = isset($p['total']) ? (float)$p['total'] : $cant * $precio;

            if (!empty($p['es_suscripcion'])) {
                $nombre .= ' (suscripción ' . (isset($p['periodo_suscripcion']) ? $p['periodo_suscripcion'] : '') . ')';
            }
            $precioTexto = $itemEsUf
                ? 'UF ' . number_format($precio, 2, ',', '.')
                : '$' . number_format($precio, 0, ',', '.');

            $this->Cell(100, 8, utf8_decode($nombre), 1, 0, 'L');
            $this->Cell(20, 8, $cant, 1, 0, 'C');
            $this->Cell(35, 8, $precioTexto, 1, 0, 'R');
            $this->Cell(35, 8, '$' . number_format($total, 0, ',', '.'), 1, 1, 'R');
        }

        if (!empty($this->data['valor_uf'])) {
            $this->SetFont('Arial', 'I', 8);
            $this->Cell(190, 5, utf8_decode('Valores en UF convertidos con la UF del día de emisión: $' . number_format($this->data['valor_uf'], 2, ',', '.')), 0, 1, 'R');
            $this->SetFont('Arial', '', 9);
        }

        $this->Ln(4);

        // --- TOTALES ---
        $this->SetFont('Arial', '', 10);
        $this->Cell(120, 6, '', 0, 0);
        $this->Cell(35, 6, utf8_decode('Subtotal:'), 0, 0, 'R');
        $this->Cell(35, 6, '$' . number_format($this->data['subtotal'], 0, ',', '.'), 0, 1, 'R');

        if ($this->data['descuento_valor'] > 0) {
            $descLabel = 'Descuento:';
            if ($this->data['descuento_tipo'] === 'porcentaje') {
                $descLabel = 'Descuento (' . $this->data['descuento_valor'] . '%):';
            }
            // Calcular valor de descuento
            $descMonto = $this->data['descuento_tipo'] === 'porcentaje'
                ? ($this->data['subtotal'] * $this->data['descuento_valor'] / 100)
                : $this->data['descuento_valor'];

            $this->Cell(120, 6, '', 0, 0);
            $this->Cell(35, 6, utf8_decode($descLabel), 0, 0, 'R');
            $this->Cell(35, 6, '-$' . number_format($descMonto, 0, ',', '.'), 0, 1, 'R');
        }

        $impuestoPct   = (float)(isset($this->data['impuesto_pct']) ? $this->data['impuesto_pct'] : 19.00);
        $impuestoMonto = ($this->data['subtotal'] - (isset($descMonto) ? $descMonto : 0)) * ($impuestoPct / 100);

        $this->Cell(120, 6, '', 0, 0);
        $this->Cell(35, 6, utf8_decode('Impuesto (IVA ' . $impuestoPct . '%):'), 0, 0, 'R');
        $this->Cell(35, 6, '$' . number_format($impuestoMonto, 0, ',', '.'), 0, 1, 'R');

        $this->SetFont('Arial', 'B', 11);
        $this->Cell(120, 8, '', 0, 0);
        $this->Cell(35, 8, utf8_decode('Total (' . $moneda . '):'), 0, 0, 'R');
        $this->Cell(35, 8, '$' . number_format($this->data['total'], 0, ',', '.'), 0, 1, 'R');

        $this->Ln(10);

        // --- NOTAS Y DATOS DE TRANSFERENCIA ---
        if (!empty($this->data['notas'])) {
            $this->SetFont('Arial', 'B', 9);
            $this->Cell(0, 5, utf8_decode('Condiciones y Notas:'), 0, 1);
            $this->SetFont('Arial', '', 8.5);
            $this->SetTextColor($this->colors['light'][0], $this->colors['light'][1], $this->colors['light'][2]);
            $this->MultiCell(0, 4, utf8_decode($this->data['notas']), 0, 'L');
            $this->Ln(6);
        }

        // Datos de Transferencia
        $this->SetTextColor($this->colors['text'][0], $this->colors['text'][1], $this->colors['text'][2]);
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(0, 5, utf8_decode('Información de Pago & Transferencia Bancaria:'), 0, 1);
        $this->SetFont('Arial', '', 8.5);
        $transferText = "Empresa: " . $this->data['franquiciado_nombre'] . "\n" .
                        "Banco: Banco de Chile\n" .
                        "Email de Envío: " . $this->data['franquiciado_email'] . "\n" .
                        "Dirección: " . $this->data['franquiciado_direccion'];
        $this->MultiCell(0, 4, utf8_decode($transferText), 0, 'L');
    }
}
