<?php
/**
 * Contrato de Hosting Web — Tykun
 * 
 * Uso: contrato_hosting.php?saas_id=5
 *      contrato_hosting.php?person_id=12
 * 
 * Este contrato es para servicios de hosting web.
 * Requiere que tipo_servicio = 'hosting' en el registro SaaS.
 */
session_start();
require('fpdf186/fpdf.php');

date_default_timezone_set('America/La_Paz');
include 'core/autoload.php';
include 'core/app/model/PersonData.php';
include 'core/app/model/SaasClient.php';

// ---------- Seguridad ----------
if (!isset($_SESSION['user_id'])) {
    http_response_code(403);
    exit('Acceso no autorizado.');
}

// ---------- Obtener datos ----------
$saas = null;
$person = null;

if (!empty($_GET['saas_id'])) {
    $saas = SaasClient::getById((int)$_GET['saas_id']);
    if (!$saas) {
        http_response_code(404);
        exit('Cliente hosting no encontrado.');
    }
    // Forzar que sea tipo hosting
    if ($saas->tipo_servicio != 'hosting' && $saas->has_hosting != 1) {
        http_response_code(400);
        exit('Este contrato es solo para servicios de hosting web.');
    }
    if (!empty($saas->person_id)) {
        $person = PersonData::getById((int)$saas->person_id);
    }
} elseif (!empty($_GET['person_id'])) {
    $person = PersonData::getById((int)$_GET['person_id']);
    if (!$person) {
        http_response_code(404);
        exit('Cliente no encontrado.');
    }
    $saas = SaasClient::getByPersonId((int)$_GET['person_id']);
    if ($saas && $saas->tipo_servicio != 'hosting' && $saas->has_hosting != 1) {
        $saas = null;
    }
} else {
    http_response_code(400);
    exit('Se requiere saas_id o person_id.');
}

// ---------- Datos del cliente ----------
if ($person) {
    $clientName = trim(
        (!empty($person->name) ? $person->name : '') .
        (!empty($person->name) && !empty($person->name_c) ? ' / ' : '') .
        (!empty($person->name_c) ? $person->name_c : '')
    );
}
if (empty($clientName)) {
    $clientName = $saas ? trim($saas->name) : '';
}
if (empty($clientName)) $clientName = 'Sin nombre';

// ---------- Datos del servicio hosting ----------
$dominio = $saas->dominio_principal ?: 'No especificado';
$dominiosAdic = $saas->dominios_adicionales ?: 'No aplica';
$plan = $saas->plan_hosting ?: 'Plan Básico';
$espacio = $saas->espacio_disco_gb ?: 0;
$anchoBanda = $saas->ancho_banda_gb ?: 0;
$correos = $saas->cuentas_correo ?: 0;
$ssl = $saas->ssl_incluido ? 'Sí' : 'No';
$soporte = 'Estandar (horario de oficina)';

// ---------- Precios ----------
$precioMensual = $saas->precio_mensual ?: 0;
$precioAnual = $saas->precio_anual ?: 0;
$costoMensual = number_format($precioMensual, 2, ',', '.');
$costoAnual = number_format($precioAnual, 2, ',', '.');
$montoLetras = numeroALetras($precioMensual) . ' Bolivianos';

// ---------- Fechas ----------
$fechaInicio = !empty($saas->fecha_inicio) 
    ? date('d \d\e F \d\e Y', strtotime($saas->fecha_inicio))
    : date('d \d\e F \d\e Y');
$fechaRenovacion = !empty($saas->fecha_renovacion)
    ? date('d \d\e F \d\e Y', strtotime($saas->fecha_renovacion))
    : date('d \d\e F \d\e Y', strtotime('+1 year'));

$meses = [
    'January'=>'enero','February'=>'febrero','March'=>'marzo',
    'April'=>'abril','May'=>'mayo','June'=>'junio',
    'July'=>'julio','August'=>'agosto','September'=>'septiembre',
    'October'=>'octubre','November'=>'noviembre','December'=>'diciembre',
];
foreach ($meses as $en => $es) {
    $fechaInicio = str_replace($en, $es, $fechaInicio);
    $fechaRenovacion = str_replace($en, $es, $fechaRenovacion);
}

// ---------- Funciones ----------
function numeroALetras($num) {
    $entero = (int)$num;
    $cents = round(($num - $entero) * 100);
    $tabla = [
        0=>'',1=>'Un',2=>'Dos',3=>'Tres',4=>'Cuatro',5=>'Cinco',
        6=>'Seis',7=>'Siete',8=>'Ocho',9=>'Nueve',10=>'Diez',
        11=>'Once',12=>'Doce',13=>'Trece',14=>'Catorce',15=>'Quince',
        16=>'Dieciséis',17=>'Diecisiete',18=>'Dieciocho',19=>'Diecinueve',
        20=>'Veinte',30=>'Treinta',40=>'Cuarenta',50=>'Cincuenta',
        60=>'Sesenta',70=>'Setenta',80=>'Ochenta',90=>'Noventa',
        100=>'Cien',150=>'Ciento Ciento',200=>'Doscientos',
        300=>'Trescientos',400=>'Cuatrocientos',500=>'Quinientos',
        600=>'Seiscientos',700=>'Setecientos',800=>'Ochocientos',
        900=>'Novecientos',
    ];
    if (isset($tabla[$entero])) {
        $letras = $tabla[$entero];
    } elseif ($entero < 100) {
        $dec = (int)($entero / 10) * 10;
        $uni = $entero % 10;
        $letras = $tabla[$dec] . ' y ' . strtolower($tabla[$uni]);
    } else {
        $letras = $entero . ' (ver monto)';
    }
    return $letras . ' ' . sprintf('%02d', $cents) . '/100';
}

// ---------- Clase PDF ----------
class ContratoHostingPDF extends FPDF
{
    public function __construct()
    {
        parent::__construct('P', 'mm', 'A4');
    }

    function Header()
    {
        $this->SetFont('Arial', 'B', 13);
        $this->SetTextColor(30, 30, 30);
        $this->SetXY(14, 10);
        $this->Cell(0, 7, iconv('UTF-8', 'windows-1252', 'CONTRATO DE PRESTACIÓN DE SERVICIOS (HOSTING)'), 0, 1, 'C');
        $this->SetFont('Arial', 'B', 12);
        $this->SetXY(14, 18);
        $this->Cell(0, 7, 'HOSTING WEB TYKUN', 0, 1, 'C');
        $this->SetDrawColor(0, 102, 204);
        $this->SetLineWidth(0.8);
        $this->Line(14, 28, 196, 28);
        $this->Ln(6);
    }

    function Footer()
    {
        $this->SetY(-15);
        $this->SetFont('Arial', 'I', 8);
        $this->SetTextColor(150, 150, 150);
        $this->Cell(0, 10, iconv('UTF-8', 'windows-1252', 'Página ') . $this->PageNo() . '/{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, iconv('UTF-8', 'windows-1252', $texto), 0, 1, 'L', true);
        $this->SetTextColor(30, 30, 30);
        $this->Ln(1);
    }

    function parrafo($texto, $sangria = false)
    {
        $this->SetFont('Arial', '', 9.5);
        $this->SetTextColor(30, 30, 30);
        if ($sangria) $this->SetX(18);
        $this->MultiCell(0, 5.5, iconv('UTF-8', 'windows-1252', $texto), 0, 'J');
        $this->Ln(2);
    }

    function itemLista($texto)
    {
        $this->SetFont('Arial', '', 9.5);
        $this->SetX(18);
        $this->Cell(4, 5.5, chr(150), 0, 0, 'L');
        $this->MultiCell(0, 5.5, iconv('UTF-8', 'windows-1252', $texto), 0, 'L');
    }
}

// ---------- Generar PDF ----------
$pdf = new ContratoHostingPDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetMargins(14, 32, 14);
$pdf->SetAutoPageBreak(true, 20);

// Introducción
$pdf->parrafo(
    'Conste por el presente Contrato de Prestación de Servicios de Hosting Web, ' .
    'que celebran por una parte TYKUN, en adelante EL PROVEEDOR, y por otra parte ' . $clientName . ', ' .
    'en adelante el CLIENTE, bajo las siguientes cláusulas:'
);
$pdf->Ln(2);

// Cláusula 1
$pdf->clausulaTitulo('PRIMERA. OBJETO');
$pdf->parrafo(
    'EL PROVEEDOR presta al CLIENTE el servicio de alojamiento web (hosting), incluyendo el almacenamiento ' .
    'de archivos, bases de datos, correos electrónicos y demás servicios relacionados con la presencia en internet.'
);

// Cláusula 2
$pdf->clausulaTitulo('SEGUNDA. DATOS DEL SERVICIO');
$pdf->parrafo('El servicio contratado incluye los siguientes datos:');
$pdf->itemLista('Dominio principal: ' . $dominio);
$pdf->itemLista('Dominios adicionales: ' . $dominiosAdic);
$pdf->itemLista('Plan de hosting: ' . $plan);
$pdf->itemLista('Espacio en disco: ' . $espacio . ' GB');
// $pdf->itemLista('Ancho de banda: ' . $anchoBanda . ' GB/mes');
$pdf->itemLista('Cuentas de correo: ' . $correos);
$pdf->itemLista('HTTPS Página Segura: ' . $ssl);
$pdf->itemLista('Nivel de soporte: ' . $soporte);
$pdf->Ln(2);

// Cláusula 3
$pdf->clausulaTitulo('TERCERA. OBLIGACIONES DEL PROVEEDOR');
$pdf->parrafo('EL PROVEEDOR se compromete a:');
$pdf->itemLista('Garantizar la disponibilidad del servicio al 99.9%');
$pdf->itemLista('Mantener los servidores en condiciones óptimas de funcionamiento');
$pdf->itemLista('Brindar soporte técnico según el nivel contratado');
$pdf->itemLista('Realizar backups mensuales de los datos del cliente');
$pdf->itemLista('Mantener la confidencialidad de la información del cliente');
$pdf->itemLista('Notificar con anticipación cualquier mantenimiento programado');
$pdf->Ln(2);

// Cláusula 4
$pdf->clausulaTitulo('CUARTA. OBLIGACIONES DEL CLIENTE');
$pdf->parrafo('El CLIENTE se compromete a:');
$pdf->itemLista('Proveer información veraz y actualizada');
$pdf->itemLista('Utilizar el servicio conforme a las políticas de uso');
$pdf->itemLista('No almacenar contenido ilegal o prohibido');
$pdf->itemLista('Cumplir con los pagos establecidos en los plazos acordados');
$pdf->itemLista('No exceder los límites de recursos asignados');
// $pdf->itemLista('Realizar backups de sus propios datos de forma periódica');
$pdf->Ln(2);

// Cláusula 5
$pdf->clausulaTitulo('QUINTA. TARIFAS Y FORMA DE PAGO');
$pdf->parrafo(
    'La tarifa anual establecida es de Bs. ' . $costoAnual . ' (pago anticipado). Esta tarifa corresponde exclusivamente al servicio de hosting y no incluye el costo de dominios.'
);
$pdf->Ln(2);

// Cláusula 6
$pdf->clausulaTitulo('SEXTA. VIGENCIA');
$pdf->parrafo(
    'El presente contrato tiene vigencia a partir del ' . $fechaInicio . ' y se renueva automáticamente ' .
    'el ' . $fechaRenovacion . ', salvo notificación escrita con al menos 15 días de anticipación.'
);

// Cláusula 7
$pdf->clausulaTitulo('SÉPTIMA. SERVICIOS INCLUIDOS');
$pdf->parrafo('El servicio de hosting incluye:');
$pdf->itemLista('Wordpress/CMS Tykun');
$pdf->itemLista('Cuentas de correo electrónico');
$pdf->itemLista('Bases de datos MySQL');
$pdf->itemLista('Certificado SSL gratuito');
$pdf->itemLista('Subdominios ilimitados');
$pdf->itemLista('FTP y acceso SSH');
$pdf->itemLista('Estadísticas de tráfico');
$pdf->Ln(2);

// Cláusula 8
$pdf->clausulaTitulo('OCTAVA. PROPIEDAD INTELECTUAL');
$pdf->parrafo(
    'La infraestructura y tecnología utilizada para prestar el servicio de hosting es desarrollada y mantenida por EL PROVEEDOR, quien garantiza su correcto funcionamiento. ' .
    'El contenido que el CLIENTE almacena en el servidor (archivos, imágenes, textos, bases de datos) es de su propiedad intelectual y no será utilizado por EL PROVEEDOR sin consentimiento previo.'
);

// Cláusula 9
$pdf->clausulaTitulo('NOVENA. LIMITACIÓN DE RESPONSABILIDAD');
$pdf->parrafo(
    'EL PROVEEDOR no será responsable por pérdida de datos, interrupciones por causas de fuerza mayor, ' .
    'o problemas derivados de la configuración del cliente.'
);

// Cláusula 10
$pdf->clausulaTitulo('DÉCIMA. TERMINACIÓN');
$pdf->parrafo(
    'Cualquiera de las partes puede terminar el contrato por incumplimiento grave. ' .
    'El cliente puede solicitar migración de datos con 48 horas de anticipación.'
);

// Cláusula 11
$pdf->clausulaTitulo('DÉCIMA PRIMERA. LEGISLACIÓN');
$pdf->parrafo('El presente contrato se rige por las leyes del Estado Plurinacional de Bolivia.');

// ---------- Firmas ----------
$pdf->Ln(8);
$pdf->SetFont('Arial', 'B', 10);
$pdf->SetTextColor(0, 51, 153);
$pdf->Cell(0, 7, 'FIRMAS', 0, 1, 'C');
$pdf->SetDrawColor(0, 102, 204);
$pdf->SetLineWidth(0.4);
$pdf->Line(14, $pdf->GetY(), 196, $pdf->GetY());
$pdf->Ln(10);

$pdf->SetFont('Arial', '', 9.5);
$pdf->SetTextColor(30, 30, 30);

$xLeft = 20;
$xRight = 115;
$yFirma = $pdf->GetY();
$lineW = 75;

$pdf->SetDrawColor(100, 100, 100);
$pdf->SetLineWidth(0.3);
$pdf->Line($xLeft, $yFirma, $xLeft + $lineW, $yFirma);
$pdf->Line($xRight, $yFirma, $xRight + $lineW, $yFirma);

$pdf->Ln(2);
$pdf->SetX($xLeft);
$pdf->Cell($lineW, 5, 'EL PROVEEDOR', 0, 0, 'C');
$pdf->SetX($xRight);
$pdf->Cell($lineW, 5, 'EL CLIENTE', 0, 1, 'C');

$pdf->Ln(1);
$pdf->SetFont('Arial', 'I', 8.5);
$pdf->SetX($xLeft);
$pdf->Cell($lineW, 5, 'TYKUN', 0, 0, 'C');
$pdf->SetX($xRight);
$pdf->Cell($lineW, 5, iconv('UTF-8', 'windows-1252', $clientName), 0, 1, 'C');

$pdf->Ln(8);
$pdf->SetFont('Arial', '', 9.5);
$pdf->SetTextColor(30, 30, 30);
$pdf->Cell(0, 6, iconv('UTF-8', 'windows-1252', 'Lugar y fecha: La Paz, ' . $fechaInicio), 0, 1, 'C');

// ---------- Salida ----------
$filename = 'Contrato_Hosting_' . preg_replace('/[^a-zA-Z0-9_-]/', '_', $clientName) . '.pdf';
$pdf->Output('I', $filename);
exit;
