<?php
session_start();
if (isset($_GET['pagare']) && !in_array($_SESSION['rol'], ['admin', 'vendedor'])) {
    header('Location: ../login.php');
    exit;
}

require_once '../includes/config.php';
require_once '../includes/db.php';

$db = new Database();
$cuota_id = isset($_GET['cuota_id']) ? (int)$_GET['cuota_id'] : 0;

// Primero verificamos si la cuota existe y obtenemos los datos necesarios
$validacion = $db->prepare("
    SELECT c.id, c.estado, c.venta_id, c.cliente_id, c.producto_id 
    FROM cuotas c
    WHERE c.id = ?
    LIMIT 1
");
$validacion->execute([$cuota_id]);
$cuota = $validacion->fetch(PDO::FETCH_ASSOC);

// Validación de parámetros considerando la existencia de la cuota
if (!$cuota) {
    ?>
    <div style="margin: 20px auto; max-width: 600px; font-family: Arial, sans-serif; background: #fff3cd; border: 1px solid #ffeeba; padding: 20px; border-radius: 5px;">
        <h3 style="color: #856404; margin-top: 0;">Error: Parámetros inválidos</h3>
        <ul style="color: #856404;">
            <li>La cuota especificada no existe en el sistema</li>
        </ul>
        <div style="margin-top: 20px;">
            <button onclick="history.back()" style="background: #ffc107; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer;">
                ← Volver atrás
            </button>
        </div>
    </div>
    <?php
    exit;
}

// Extraer los IDs necesarios de la cuota
$venta_id = $cuota['venta_id'];
$cliente_id = $cuota['cliente_id'];

if ($cuota['estado'] !== 'PENDIENTE') {
    die('<div style="margin: 20px auto; max-width: 600px; font-family: Arial, sans-serif; background: #f8d7da; border: 1px solid #f5c6cb; padding: 20px; border-radius: 5px; color: #721c24;">
        <h3 style="margin-top: 0;">Error: Cuota no elegible</h3>
        <p>No se puede generar el pagaré de una cuota que ya ha sido pagada.</p>
        <div style="margin-top: 20px;">
            <button onclick="history.back()" style="background: #dc3545; color: white; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer;">
                ← Volver atrás
            </button>
        </div>
    </div>');
}

// Obtener datos necesarios directamente de la tabla cuotas
$stmt = $db->prepare("
    SELECT 
        cl.nombre, cl.apellidos, cl.tipo_documento, cl.numero_documento,
        c.monto, c.fecha_vencimiento, c.id, c.numero_cuota, c.producto_id, c.observaciones,
        p.titulo as producto_nombre,
        cfg.pagare_clausulas, cfg.moneda, cfg.razon_social, cfg.ruc, cfg.ciudad, 
        cfg.moneda_descripcion, cfg.con_decimales, cfg.favicon
    FROM cuotas c 
    JOIN clientes cl ON cl.id_cliente = c.cliente_id
    LEFT JOIN productos p ON p.id = c.producto_id
    CROSS JOIN configuracion cfg
    WHERE c.id = ? 
    LIMIT 1
");

try {
    $stmt->execute([$cuota_id]);
    $datos = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$datos) {
        // Consulta de depuración
        $debug = $db->prepare("
            SELECT 
                (SELECT COUNT(*) FROM cuotas WHERE id = ?) as cuota_existe,
                (SELECT COUNT(*) FROM clientes WHERE id_cliente = ?) as cliente_existe
        ");
        $debug->execute([$cuota_id, $cliente_id]);
        $debug_info = $debug->fetch(PDO::FETCH_ASSOC);
        
        die('No se encontraron datos. Información de depuración:<br>
             - Cuota existe: ' . ($debug_info['cuota_existe'] ? 'Sí' : 'No') . '<br>
             - Cliente existe: ' . ($debug_info['cliente_existe'] ? 'Sí' : 'No') . '<br>
             ID Cuota buscada: ' . $cuota_id . '<br>
             ID Cliente: ' . $cliente_id);
    }

    // Si es una cuota unificada (producto_id = 0), procesar los productos
    if ($datos['producto_id'] == 0) {
        // Obtener los IDs de productos y cantidades de las observaciones
        $productos_info = array_map(function($item) {
            return explode('/', trim($item));
        }, explode(',', $datos['observaciones']));
        
        // Extraer solo los IDs para la consulta
        $ids_productos = array_column($productos_info, 0);
        
        // Crear mapa de cantidades
        $cantidades = array_combine(
            $ids_productos,
            array_column($productos_info, 1)
        );
        
        // Consultar los nombres de los productos
        $placeholders = str_repeat('?,', count($ids_productos) - 1) . '?';
        $stmt_productos = $db->prepare("
            SELECT id, titulo
            FROM productos 
            WHERE id IN ($placeholders)
        ");
        $stmt_productos->execute($ids_productos);
        $productos_detalles = $stmt_productos->fetchAll(PDO::FETCH_ASSOC);
        
        // Crear lista de productos con cantidades
        $nombres_productos = [];
        foreach ($productos_detalles as $prod) {
            $cantidad = $cantidades[$prod['id']];
            $nombres_productos[] = $prod['titulo'] . ' (x' . $cantidad . ')';
        }
        
        // Actualizar el nombre del producto en los datos
        $datos['producto_nombre'] = implode(' + ', $nombres_productos);
    }
} catch (PDOException $e) {
    die('Error en la consulta: ' . $e->getMessage());
}

// Definir arrays y función convertirGrupo fuera de numeroALetras
$unidades = array('', 'UN', 'DOS', 'TRES', 'CUATRO', 'CINCO', 'SEIS', 'SIETE', 'OCHO', 'NUEVE');
$decenas = array('', 'DIEZ', 'VEINTE', 'TREINTA', 'CUARENTA', 'CINCUENTA', 'SESENTA', 'SETENTA', 'OCHENTA', 'NOVENTA');
$centenas = array('', 'CIENTO', 'DOSCIENTOS', 'TRESCIENTOS', 'CUATROCIENTOS', 'QUINIENTOS', 'SEISCIENTOS', 'SETECIENTOS', 'OCHOCIENTOS', 'NOVECIENTOS');
$especiales = array(
    'DIEZ' => array('ONCE', 'DOCE', 'TRECE', 'CATORCE', 'QUINCE', 'DIECISEIS', 'DIECISIETE', 'DIECINUEVE'),
    'VEINTE' => array('VEINTIUN', 'VEINTIDOS', 'VEINTITRES', 'VEINTICUATRO', 'VEINTICINCO', 'VEINTISEIS', 'VEINTISIETE', 'VEINTINUEVE')
);

function convertirGrupo($n) {
    global $unidades, $decenas, $centenas, $especiales;
    
    if ($n == 0) return '';
    if ($n == 100) return 'CIEN';
    
    $texto = '';
    
    // Centenas
    if ($n >= 100) {
        $texto .= $centenas[floor($n / 100)] . ' ';
        $n = $n % 100;
    }
    
    // Decenas y unidades
    if ($n > 0) {
        if ($n < 10) {
            $texto .= $unidades[$n];
        } else {
            $decena = floor($n / 10);
            $unidad = $n % 10;
            
            if ($decena == 1 && $unidad > 0) {
                $texto .= $especiales['DIEZ'][$unidad - 1];
            } elseif ($decena == 2 && $unidad > 0) {
                $texto .= $especiales['VEINTE'][$unidad - 1];
            } else {
                $texto .= $decenas[$decena];
                if ($unidad > 0) {
                    $texto .= ' Y ' . $unidades[$unidad];
                }
            }
        }
    }
    
    return trim($texto);
}

function numeroALetras($numero, $moneda_descripcion, $con_decimales) {
    if (!is_numeric($numero)) return '';
    
    $parte_entera = floor($numero);
    $centavos = round(($numero - $parte_entera) * 100);
    
    // Manejar grupos de tres dígitos
    $grupos = array();
    $tmp = $parte_entera;
    
    while ($tmp > 0) {
        $grupos[] = $tmp % 1000;
        $tmp = floor($tmp / 1000);
    }
    
    $texto = '';
    
    if ($parte_entera == 0) {
        $texto = 'CERO';
    } else {
        $niveles = array('', 'MIL', 'MILLONES', 'MIL', 'BILLONES');
        
        for ($i = count($grupos) - 1; $i >= 0; $i--) {
            if ($grupos[$i] > 0) {
                if ($texto != '') $texto .= ' ';
                
                // Caso especial para los miles
                if ($grupos[$i] == 1 && $niveles[$i] == 'MIL') {
                    $texto .= $niveles[$i];
                } else {
                    $texto .= convertirGrupo($grupos[$i]) . ' ' . $niveles[$i];
                }
            }
        }
    }

    $texto = trim($texto) . ' ' . strtoupper($moneda_descripcion);

    if ($con_decimales && $centavos > 0) {
        $texto .= ' CON ' . str_pad($centavos, 2, '0', STR_PAD_LEFT) . '/100';
    }

    return trim($texto);
}

?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Pagaré a la Orden</title>
    <link rel="shortcut icon" href="../uploads/config/<?php echo htmlspecialchars($datos['favicon']); ?>" type="image/x-icon">
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 40px;
            line-height: 1.6;
        }
        .pagare-container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            border: 1px solid #000;
        }
        .titulo {
            text-align: center;
            font-weight: bold;
            font-size: 18px;
            margin-bottom: 20px;
        }
        .fecha {
            text-align: right;
            margin-bottom: 20px;
        }
        .contenido {
            text-align: justify;
            margin-bottom: 20px;
        }
        .firma {
            margin-top: 100px;
            text-align: center;
        }
        @media print {
            body { margin: 0; }
            .no-print { display: none; }
        }
        .cuota-info {
            text-align: center;
            font-size: 14px;
            margin-bottom: 20px;
            color: #555;
        }
    </style>
</head>
<body>
    <div class="no-print">
        <button onclick="window.print()">Imprimir Pagaré</button>
        <hr>
    </div>

    <div class="pagare-container">
        <div class="titulo">PAGARÉ A LA ORDEN</div>
        
        <div class="fecha">
            <?php echo htmlspecialchars($datos['ciudad']); ?>, <?php echo date('d/m/Y'); ?>
        </div>

        <div class="cuota-info">
            <strong>Cuota <?php echo htmlspecialchars($datos['numero_cuota']); ?></strong>
            <br>Vencimiento: <?php echo date('d/m/Y', strtotime($datos['fecha_vencimiento'])); ?>
        </div>

        <div class="contenido">
            <p>Por <?php echo htmlspecialchars($datos['moneda']) . ' ' . number_format($datos['monto'], $datos['con_decimales'] ? 2 : 0); ?></p>
            <p>(<?php echo numeroALetras($datos['monto'], $datos['moneda_descripcion'], $datos['con_decimales']); ?>)</p>
            
            <p>Pagaré incondicionalmente a la orden de <?php echo htmlspecialchars($datos['razon_social']); ?> 
            con RUC <?php echo htmlspecialchars($datos['ruc']); ?> en esta ciudad o en el lugar donde se me requiera el pago, 
            la cantidad de <?php echo htmlspecialchars($datos['moneda']) . ' ' . number_format($datos['monto'], $datos['con_decimales'] ? 2 : 0); ?> 
            (<?php echo numeroALetras($datos['monto'], $datos['moneda_descripcion'], $datos['con_decimales']); ?>)
            en concepto de cuota número <?php echo htmlspecialchars($datos['numero_cuota']); ?> del producto adquirido "<?php echo htmlspecialchars($datos['producto_nombre']); ?>".</p>

            <p>Fecha de vencimiento: <?php echo date('d/m/Y', strtotime($datos['fecha_vencimiento'])); ?></p>

            <?php echo nl2br(htmlspecialchars($datos['pagare_clausulas'])); ?>
        </div>

        <div class="firma">
            <div>_________________________________</div>
            <div>Firma del Deudor</div>
            <div><?php echo htmlspecialchars($datos['nombre'] . ' ' . $datos['apellidos']); ?></div>
            <div><?php echo htmlspecialchars($datos['tipo_documento'] . ': ' . $datos['numero_documento']); ?></div>
        </div>
    </div>
</body>
</html>
