<?php
/**
 * Contrato de Prestación de Servicios — 16 cláusulas
 * Template para contract_type = 'servicio'
 *
 * Datos del contrato vía $contrato (objeto ContractData)
 * CONTRATISTA: $contrato->part_a_name (NO hardcoded — obs 1447)
 * Texto legal verbatim del template del SAN JORGE (obs 1438 input del user)
 * Variables se sustituyen desde campos DB de contracts:
 *   - alcance_servicio, equipamiento, plazo_dias, forma_pago,
 *     servicios_no_incluidos, garantia_meses, garantia_detalle,
 *     soporte, jurisdiccion
 */
require_once __DIR__ . '/fpdf186/fpdf.php';

date_default_timezone_set('America/La_Paz');

// Helpers
function t($v) { return $v === null ? '' : trim((string)$v); }
function e($v) { return iconv('UTF-8', 'windows-1252//TRANSLIT//IGNORE', t($v)); }

// Spell-out básico para cardinals usuales (para NOVENA GARANTÍA)
function numSpell($n) {
    $unidades = ['', 'uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve', 'diez', 'once', 'doce', 'trece', 'catorce', 'quince', 'dieciséis', 'diecisiete', 'dieciocho', 'diecinueve', 'veinte', 'veintiuno', 'veintidós', 'veintitrés', 'veinticuatro'];
    if ((int)$n >= 1 && (int)$n <= 24) return $unidades[(int)$n];
    return (string)$n;
}

// Helper para imprimir cláusulas (título + cuerpo)
function printClausula($pdf, $numeral, $titulo, $cuerpo) {
    $pdf->clausulaTitulo($numeral . '. ' . strtoupper($titulo));
    if (is_array($cuerpo)) {
        foreach ($cuerpo as $p) $pdf->parrafo($p);
    } else {
        $pdf->parrafo($cuerpo);
    }
}

class ContratoServiciosPDF extends FPDF
{
    function Header()
    {
        $this->SetFont('Arial', 'B', 11);
        $this->SetTextColor(0, 51, 102);
        $this->Cell(0, 8, e('CONTRATO DE PRESTACIÓN DE SERVICIOS'), 0, 1, 'C');
        $this->SetDrawColor(0, 102, 204);
        $this->SetLineWidth(0.8);
        $this->Line(14, $this->GetY(), 196, $this->GetY());
        $this->Ln(8);
    }

    function Footer()
    {
        $this->SetY(-15);
        $this->SetFont('Arial', 'I', 8);
        $this->SetTextColor(128, 128, 128);
        $this->Cell(0, 10, e('Página ') . $this->PageNo() . e(' de {nb}'), 0, 0, 'C');
    }

    function clausulaTitulo($texto)
    {
        $this->SetFont('Arial', 'B', 10);
        $this->SetTextColor(0, 51, 153);
        $this->SetFillColor(240, 245, 255);
        $this->Cell(0, 7, e($texto), 0, 1, 'L', true);
        $this->SetTextColor(30, 30, 30);
        $this->Ln(1);
    }

    function parrafo($texto, $sangria = false)
    {
        $this->SetFont('Arial', '', 10);
        $this->SetTextColor(30, 30, 30);
        if ($sangria) $this->SetX(18);
        $this->MultiCell(0, 5.5, e($texto), 0, 'J');
        $this->Ln(3);
    }

    function itemLista($texto)
    {
        $this->SetFont('Arial', '', 10);
        $this->SetX(18);
        $this->Cell(4, 5.5, chr(149), 0, 0, 'L');
        $this->MultiCell(0, 5.5, e($texto), 0, 'L');
    }
}

$pdf = new ContratoServiciosPDF();
$pdf->AliasNbPages('{nb}');
$pdf->AddPage();
$pdf->SetMargins(14, 32, 14);
$pdf->SetAutoPageBreak(true, 20);

// ─────────────────────────────────────────────────
// Variables desde el contrato
// ─────────────────────────────────────────────────
$alcanceServicio     = t($contrato->alcance_servicio);
$equipamiento        = t($contrato->equipamiento);
$plazoDias           = t($contrato->plazo_dias)  ? (int)$contrato->plazo_dias  : 3;
$plazoDiasLetras     = 'tres'; // literal por defecto — coincide con plantilla del SAN JORGE
$formaPago           = t($contrato->forma_pago) ?: '50% como anticipo para adquisición de equipos y programación del proyecto. 40% al concluir la instalación física. 10% contra entrega, pruebas de funcionamiento y firma del Acta de Conformidad.';
$serviciosNoIncluidos = t($contrato->servicios_no_incluidos);
$garantiaMeses       = t($contrato->garantia_meses) ? (int)$contrato->garantia_meses : 12;
$garantiaDetalle     = t($contrato->garantia_detalle);
$soporte             = t($contrato->soporte);
$jurisdiccion        = t($contrato->jurisdiccion) ?: 'La Paz, Bolivia';
$monto               = t($contrato->amount) ? number_format((float)$contrato->amount, 2, ',', '.') : '____________';
$fechaInicio         = t($contrato->start_date) ? date('d/m/Y', strtotime($contrato->start_date)) : '___/___/______';
$fechaFin            = t($contrato->end_date)   ? date('d/m/Y', strtotime($contrato->end_date))   : '___/___/______';

// Partes
$contratistaNombre = t($contrato->part_a_name) ?: 'Consultora Tykun';
$contratistaCargo  = t($contrato->part_a_cargo) ?: 'Representante Legal';
$clienteNombre     = t($contrato->part_b_name);
$clienteCargo      = t($contrato->part_b_cargo);

// ─────────────────────────────────────────────────
// TÍTULO PRINCIPAL
// ─────────────────────────────────────────────────
$pdf->SetFont('Arial', 'B', 13);
$pdf->SetTextColor(0, 51, 102);
$pdf->MultiCell(0, 7, e('CONTRATO DE PRESTACIÓN DE SERVICIOS DE INGENIERÍA E IMPLEMENTACIÓN DE INFRAESTRUCTURA DE RED INALÁMBRICA'), 0, 'C');
$pdf->SetTextColor(30, 30, 30);
$pdf->Ln(4);

// ─────────────────────────────────────────────────
// BLOQUE ENTRE
// ─────────────────────────────────────────────────
$pdf->SetFont('Arial', 'B', 11);
$pdf->Cell(0, 7, e('ENTRE:'), 0, 1, 'L');
$pdf->Ln(2);

$pdf->SetFont('Arial', 'B', 10);
$pdf->MultiCell(0, 6, e($contratistaNombre), 0, 'L');
$pdf->SetFont('Arial', '', 10);
$pdf->MultiCell(0, 6, e($contratistaCargo . ', legalmente constituida conforme a las leyes del Estado Plurinacional de Bolivia, con NIT ____________, representada legalmente por ________________________'), 0, 'L');
$pdf->Ln(2);

$pdf->SetFont('Arial', 'I', 10);
$pdf->Cell(0, 6, e('en adelante denominada "EL CONTRATISTA"'), 0, 1, 'C');
$pdf->Ln(2);

$pdf->SetFont('Arial', 'B', 14);
$pdf->Cell(0, 8, e('y'), 0, 1, 'C');
$pdf->Ln(2);

$pdf->SetFont('Arial', 'B', 10);
$pdf->MultiCell(0, 6, e($clienteNombre ?: 'SAN JORGE CLÍNICA ESPECIALIZADA AES S.R.L.'), 0, 'L');
$pdf->SetFont('Arial', '', 10);
$pdf->MultiCell(0, 6, e($clienteCargo . ', legalmente constituida conforme a las leyes del Estado Plurinacional de Bolivia, con NIT ____________, representada por ________________________'), 0, 'L');
$pdf->Ln(2);

$pdf->SetFont('Arial', 'I', 10);
$pdf->Cell(0, 6, e('en adelante denominada "EL CLIENTE"'), 0, 1, 'C');
$pdf->Ln(4);

$pdf->SetFont('Arial', '', 10);
$pdf->MultiCell(0, 5.5, e('Las partes acuerdan celebrar el presente Contrato de Prestación de Servicios, sujeto a las siguientes cláusulas:'), 0, 'J');
$pdf->Ln(4);
// ── PRIMERA. OBJETO ──
printClausula($pdf, 'PRIMERA', 'OBJETO', [
    'El presente contrato tiene por objeto la provisión, instalación, configuración, puesta en marcha y entrega de ' . ($alcanceServicio ?: 'una solución integral de infraestructura de red inalámbrica empresarial') . ', conforme a la propuesta técnica y económica aceptada por ambas partes.'
]);

// ── SEGUNDA. ALCANCE DEL SERVICIO ──
$pdf->clausulaTitulo('SEGUNDA. ALCANCE DEL SERVICIO');
$pdf->parrafo('El CONTRATISTA ejecutará las siguientes actividades:');
$actividades = $alcanceServicio
    ? array_filter(array_map('trim', preg_split('/\r?\n/', $alcanceServicio)))
    : [
        'Levantamiento técnico previo.',
        'Diseño de la solución inalámbrica.',
        'Suministro de los equipos especificados en la propuesta.',
        'Instalación del switch PoE.',
        'Instalación física de los Access Points.',
        'Instalación de cableado estructurado Categoría 6.',
        'Terminación y certificación básica de los enlaces.',
        'Configuración de la infraestructura WiFi.',
        'Configuración de seguridad inalámbrica.',
        'Actualización de firmware.',
        'Optimización de canales y potencia.',
        'Pruebas funcionales.',
        'Capacitación básica al personal designado por EL CLIENTE.',
        'Entrega de documentación técnica.'
    ];
foreach ($actividades as $act) $pdf->itemLista($act);
$pdf->Ln(2);

// ── TERCERA. EQUIPAMIENTO ──
$pdf->clausulaTitulo('TERCERA. EQUIPAMIENTO');
$pdf->parrafo('El proyecto contempla el suministro de los siguientes equipos:');
$equipos = $equipamiento
    ? array_filter(array_map('trim', preg_split('/\r?\n/', $equipamiento)))
    : [
        'Cinco (5) Access Point Huawei eKit AP362E.',
        'Un (1) Switch Huawei eKit S220S-8P4J.',
        'Materiales de instalación.',
        'Cableado estructurado Categoría 6.',
        'Accesorios de fijación.',
        'Materiales de canalización necesarios para la instalación.'
    ];
foreach ($equipos as $eq) $pdf->itemLista($eq);
$pdf->Ln(2);

// ── CUARTA. PLAZO DE EJECUCIÓN ──
printClausula($pdf, 'CUARTA', 'PLAZO DE EJECUCIÓN', [
    'El plazo estimado para la ejecución será de ' . $plazoDias . ' (' . $plazoDiasLetras . ') días hábiles, contados a partir de:'
]);
$pdf->itemLista('La firma del presente contrato.');
$pdf->itemLista('La recepción del anticipo establecido.');
$pdf->itemLista('La disponibilidad del sitio para la instalación.');
$pdf->itemLista('La entrega de los equipos, en caso de existir tiempos de importación o adquisición.');
$pdf->Ln(2);
$pdf->parrafo('Los plazos podrán ampliarse cuando existan causas atribuibles al cliente, fuerza mayor o retrasos en la provisión de equipamiento ajenos al CONTRATISTA.');

// ── QUINTA. OBLIGACIONES DEL CONTRATISTA ──
$pdf->clausulaTitulo('QUINTA. OBLIGACIONES DEL CONTRATISTA');
$pdf->parrafo('El CONTRATISTA se obliga a:');
$pdf->itemLista('Ejecutar el proyecto conforme a las buenas prácticas de ingeniería.');
$pdf->itemLista('Utilizar materiales nuevos y de calidad.');
$pdf->itemLista('Configurar adecuadamente los equipos.');
$pdf->itemLista('Mantener confidencialidad sobre la información del CLIENTE.');
$pdf->itemLista('Entregar la documentación correspondiente.');
$pdf->itemLista('Otorgar la garantía establecida en el presente contrato.');
$pdf->Ln(2);

// ── SEXTA. OBLIGACIONES DEL CLIENTE ──
$pdf->clausulaTitulo('SEXTA. OBLIGACIONES DEL CLIENTE');
$pdf->parrafo('EL CLIENTE se compromete a:');
$pdf->itemLista('Facilitar el acceso a todas las áreas necesarias.');
$pdf->itemLista('Designar un responsable técnico para acompañar la implementación.');
$pdf->itemLista('Proporcionar suministro eléctrico estable.');
$pdf->itemLista('Permitir las ventanas de mantenimiento acordadas.');
$pdf->itemLista('Realizar los pagos conforme al cronograma establecido.');
$pdf->itemLista('Informar oportunamente cualquier requerimiento adicional.');
$pdf->Ln(2);

// ── SÉPTIMA. PRECIO Y FORMA DE PAGO ──
printClausula($pdf, 'SÉPTIMA', 'PRECIO Y FORMA DE PAGO', [
    'El valor total del contrato será de:',
    'Bs. ' . $monto,
    'La forma de pago será:'
]);
foreach (array_filter(array_map('trim', preg_split('/\r?\n|\./', $formaPago))) as $linea) {
    $pdf->itemLista($linea);
}
$pdf->Ln(2);

// ── OCTAVA. SERVICIOS NO INCLUIDOS ──
$pdf->clausulaTitulo('OCTAVA. SERVICIOS NO INCLUIDOS');
$pdf->parrafo('No forman parte del presente contrato:');
$noIncluidos = $serviciosNoIncluidos
    ? array_filter(array_map('trim', preg_split('/\r?\n/', $serviciosNoIncluidos)))
    : [
        'Reemplazo del servicio de Internet.',
        'Reparación del cableado existente que no forme parte del nuevo tendido.',
        'Obras civiles.',
        'Canalizaciones adicionales no previstas.',
        'Configuración de servidores.',
        'Configuración de firewall de terceros.',
        'Integración con sistemas clínicos.',
        'Soporte sobre equipos ajenos al presente proyecto.'
    ];
foreach ($noIncluidos as $item) $pdf->itemLista($item);
$pdf->Ln(2);
$pdf->parrafo('Cualquier requerimiento adicional será cotizado mediante una propuesta independiente.');

// ── NOVENA. GARANTÍA ──
printClausula($pdf, 'NOVENA', 'GARANTÍA', [
    'El CONTRATISTA otorga una garantía de ' . $garantiaMeses . ' (' . numSpell($garantiaMeses) . ') meses sobre la instalación y configuración realizadas.'
]);
$pdf->parrafo('La garantía cubre:');
$cubre = $garantiaDetalle
    ? array_filter(array_map('trim', preg_split('/\r?\n/', $garantiaDetalle)))
    : [
        'Defectos de instalación.',
        'Errores de configuración.',
        'Ajustes derivados de la implementación.'
    ];
foreach ($cubre as $item) $pdf->itemLista($item);
$pdf->Ln(2);
$pdf->parrafo('La garantía no cubre:');
$noCubre = [
    'Manipulación por terceros.',
    'Daños eléctricos.',
    'Sobretensiones.',
    'Descargas atmosféricas.',
    'Daños físicos.',
    'Modificaciones realizadas por personal no autorizado.',
    'Fallas del proveedor de Internet.',
    'Equipos suministrados por terceros fuera del alcance del proyecto.'
];
foreach ($noCubre as $item) $pdf->itemLista($item);
$pdf->Ln(2);
$pdf->parrafo('La garantía de los equipos estará sujeta a las condiciones del fabricante.');

// ── DÉCIMA. SOPORTE POSTERIOR ──
$pdf->clausulaTitulo('DÉCIMA. SOPORTE POSTERIOR');
if ($soporte) {
    $pdf->parrafo($soporte);
} else {
    $pdf->parrafo('Concluido el periodo de garantía, el soporte podrá contratarse bajo modalidad de bolsa de horas o mediante un contrato de mantenimiento preventivo y correctivo.');
}

// ── DÉCIMA PRIMERA. CAMBIOS DE ALCANCE ──
printClausula($pdf, 'DÉCIMA PRIMERA', 'CAMBIOS DE ALCANCE', [
    'Cualquier modificación solicitada por EL CLIENTE que implique equipos adicionales, cableado adicional, cambios de ubicación, nuevas configuraciones o ampliaciones será considerada un servicio adicional y requerirá la aprobación de una cotización complementaria.'
]);

// ── DÉCIMA SEGUNDA. CONFIDENCIALIDAD ──
printClausula($pdf, 'DÉCIMA SEGUNDA', 'CONFIDENCIALIDAD', [
    'Toda información técnica, administrativa o comercial conocida durante la ejecución del proyecto será considerada confidencial y no podrá ser divulgada sin autorización escrita de la otra parte.'
]);

// ── DÉCIMA TERCERA. TERMINACIÓN ──
$pdf->clausulaTitulo('DÉCIMA TERCERA. TERMINACIÓN');
$pdf->parrafo('El contrato podrá darse por terminado por:');
$pdf->itemLista('Mutuo acuerdo.');
$pdf->itemLista('Incumplimiento grave de cualquiera de las partes.');
$pdf->itemLista('Imposibilidad técnica sobrevenida.');
$pdf->itemLista('Fuerza mayor debidamente demostrada.');
$pdf->Ln(2);

// ── DÉCIMA CUARTA. PROPIEDAD ──
printClausula($pdf, 'DÉCIMA CUARTA', 'PROPIEDAD', [
    'Los equipos suministrados serán propiedad del CLIENTE una vez cancelado el 100% del valor del contrato.',
    'Hasta ese momento permanecerán bajo propiedad del CONTRATISTA.'
]);

// ── DÉCIMA QUINTA. JURISDICCIÓN ──
printClausula($pdf, 'DÉCIMA QUINTA', 'JURISDICCIÓN', [
    'Las partes se someten a las leyes del Estado Plurinacional de Bolivia y a la jurisdicción de los jueces y tribunales competentes de la ciudad de ' . $jurisdiccion . ' para la resolución de cualquier controversia derivada del presente contrato.'
]);

// ── DÉCIMA SEXTA. ACEPTACIÓN ──
$pdf->clausulaTitulo('DÉCIMA SEXTA. ACEPTACIÓN');
$pdf->parrafo('En señal de conformidad, las partes firman el presente contrato en dos ejemplares del mismo tenor y validez legal.');
$pdf->Ln(4);

// Tabla de firmas 2 columnas
$pdf->SetFont('Arial', 'B', 10);
$pdf->Cell(95, 6, e('POR EL CONTRATISTA'), 0, 0, 'C');
$pdf->Cell(95, 6, e('POR EL CLIENTE'), 0, 1, 'C');
$pdf->Ln(6);
$pdf->SetFont('Arial', '', 9);
$pdf->Cell(95, 5, e('Nombre: ' . $contratistaNombre), 0, 0, 'L');
$pdf->Cell(95, 5, e('Nombre: ' . $clienteNombre), 0, 1, 'L');
$pdf->Ln(6);
$pdf->Cell(95, 5, e('Cargo: ' . $contratistaCargo), 0, 0, 'L');
$pdf->Cell(95, 5, e('Cargo: ________________________'), 0, 1, 'L');
$pdf->Ln(6);
$pdf->Cell(95, 5, e('Firma: ________________________'), 0, 0, 'L');
$pdf->Cell(95, 5, e('Firma: ________________________'), 0, 1, 'L');
$pdf->Ln(6);
$pdf->Cell(95, 5, e('Fecha: ___/___/______'), 0, 0, 'L');
$pdf->Cell(95, 5, e('Fecha: ___/___/______'), 0, 1, 'L');
$pdf->Ln(6);


$cite = t($contrato->cite) ?: 'contrato';
$pdf->Output('I', "Contrato-Servicios-{$cite}.pdf");
exit;
