<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;

// Configuración de la API de Hablame
$apiKey = "PkTgjOzy5qbZXDm4eLdBMfRiAhZ0NwrGW7gK9WUdOqM4tDJEVQhvqFtzRnQcK2atJz0HAuUx3CSXTmTb113jelroHGNj0agwdanGMpwIxukN76Q9AJ8W9Ymos66nDBE3";
// El account es requerido en v4/v5 - Por favor cambia este número por el tuyo.
$account = "10015028";
$apiUrl = "https://www.hablame.co/api/sms/v5/send";

// Archivo Excel a procesar
$excelFile = 'contactos.xlsx';

$logMessages = [];
$errorFound = false;

function addLog($msg, $type = 'info')
{
    global $logMessages;
    $logMessages[] = ['message' => $msg, 'type' => $type];
}

try {
    if (!file_exists($excelFile)) {
        throw new Exception("El archivo '$excelFile' no fue encontrado.");
    }

    addLog("Cargando archivo Excel...");

    $spreadsheet = IOFactory::load($excelFile);
    $worksheet = $spreadsheet->getActiveSheet();
    $rows = $worksheet->toArray();

    $isFirstRow = true;
    $messagesQueue = [];

    foreach ($rows as $rowIndex => $row) {
        if ($isFirstRow) {
            $isFirstRow = false;
        // Descomenta la siguiente línea si la primera fila son encabezados
        // continue; 
        }

        $numero = isset($row[0]) ? trim((string)$row[0]) : '';
        $mensaje = isset($row[1]) ? trim((string)$row[1]) : '';

        if (!empty($numero) && !empty($mensaje)) {
            $messagesQueue[] = [
                "id" => uniqid($rowIndex . "_"),
                "to" => $numero,
                "text" => $mensaje
            ];
        }
        else {
            addLog("Fila " . ($rowIndex + 1) . " ignorada por datos incompletos.", 'warning');
        }
    }

    if (empty($messagesQueue)) {
        throw new Exception("No se encontraron registros válidos para enviar en el archivo Excel.");
    }

    addLog("Se encontraron " . count($messagesQueue) . " mensajes validos listos para enviar.", 'success');
    addLog("Preparando comunicación con la API de Hablame ($apiUrl)...");

    $payloadData = [
        "priority" => false,
        "certificate" => false,
        "flash" => false,
        "messages" => $messagesQueue
    ];

    $payloadJson = json_encode($payloadData);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payloadJson);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'account: ' . $account,
        'apiKey: ' . $apiKey,
        'token: ' . $apiKey,
        'Content-Type: application/json',
        'Accept: application/json'
    ]);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curlError = curl_error($ch);
    curl_close($ch);

    if ($curlError) {
        addLog("Error de conexión cURL: $curlError", 'error');
        $errorFound = true;
    }
    else {

        $responseData = json_decode($response, true);

        if ($httpCode >= 200 && $httpCode < 300) {
            addLog("Petición aceptada por la API (Código: $httpCode).", 'success');
        }
        else {
            addLog("Falló la petición con el código HTTP $httpCode.", 'error');
            addLog("Respuesta de la API:", 'error');
            $errorFound = true;
        }
        addLog(json_encode($responseData, JSON_PRETTY_PRINT), 'code');
    }

}
catch (Exception $e) {
    addLog($e->getMessage(), 'error');
    $errorFound = true;
}
?>
<!DOCTYPE html>
<html lang="es">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Reporte de Envío de SMS</title>
    <style>
        :root {
            --primary: #4A90E2;
            --success: #2ECC71;
            --warning: #F1C40F;
            --danger: #E74C3C;
            --dark: #2C3E50;
            --light: #ECF0F1;
        }

        body {
            font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
            background-color: #f8f9fc;
            color: #333;
            margin: 0;
            padding: 40px 20px;
            display: flex;
            justify-content: center;
        }

        .container {
            background: #ffffff;
            border-radius: 12px;
            box-shadow: 0 8px 30px rgba(0, 0, 0, 0.05);
            max-width: 800px;
            width: 100%;
            overflow: hidden;
        }

        .header {
            background-color: var(--primary);
            color: white;
            padding: 25px 30px;
            display: flex;
            align-items: center;
            justify-content: space-between;
        }

        .header h1 {
            margin: 0;
            font-size: 1.5rem;
            font-weight: 600;
        }

        .status-badge {
            padding: 6px 14px;
            border-radius: 20px;
            font-size: 0.85rem;
            font-weight: bold;
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }

        .status-badge.success {
            background-color: rgba(255, 255, 255, 0.2);
            color: #fff;
        }

        .status-badge.error {
            background-color: #fff;
            color: var(--danger);
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        }

        .content {
            padding: 30px;
        }

        .log-item {
            margin-bottom: 12px;
            padding: 16px;
            border-radius: 8px;
            border-left: 4px solid #ddd;
            background-color: #fcfcfc;
            display: flex;
            align-items: flex-start;
            font-size: 0.95rem;
            line-height: 1.5;
            transition: transform 0.2s ease;
        }

        .log-item:hover {
            transform: translateX(3px);
            background-color: #f7f9fa;
        }

        .log-item.info {
            border-left-color: var(--primary);
        }

        .log-item.success {
            border-left-color: var(--success);
            background-color: #f0fbf4;
        }

        .log-item.warning {
            border-left-color: var(--warning);
            background-color: #fdfaf0;
        }

        .log-item.error {
            border-left-color: var(--danger);
            background-color: #fdf3f2;
            color: #a12b2b;
        }

        .log-item.code {
            border-left-color: var(--dark);
            background-color: #2b2b2b;
            color: #a9b7c6;
            font-family: monospace;
            overflow-x: auto;
        }

        .icon {
            margin-right: 15px;
            font-size: 1.2rem;
            margin-top: 2px;
        }

        .log-text {
            flex-grow: 1;
        }

        pre {
            margin: 0;
            white-space: pre-wrap;
        }

        .footer-note {
            margin-top: 30px;
            text-align: center;
            font-size: 0.85rem;
            color: #7f8c8d;
            border-top: 1px solid #eee;
            padding-top: 20px;
        }
    </style>
</head>

<body>

    <div class="container">
        <div class="header">
            <h1>Reporte de Envío de SMS</h1>
            <span class="status-badge <?php echo $errorFound ? 'error' : 'success'; ?>">
                <?php echo $errorFound ? 'Proceso con Errores' : 'Proceso Exitoso'; ?>
            </span>
        </div>

        <div class="content">
            <?php foreach ($logMessages as $log): ?>
            <div class="log-item <?php echo htmlspecialchars($log['type']); ?>">
                <div class="icon">
                    <?php
    if ($log['type'] == 'success')
        echo '✅';
    elseif ($log['type'] == 'error')
        echo '❌';
    elseif ($log['type'] == 'warning')
        echo '⚠️';
    elseif ($log['type'] == 'code')
        echo '💻';
    else
        echo 'ℹ️';
?>
                </div>
                <div class="log-text">
                    <?php if ($log['type'] === 'code'): ?>
                    <pre><?php echo htmlspecialchars($log['message']); ?></pre>
                    <?php
    else: ?>
                    <?php echo htmlspecialchars($log['message']); ?>
                    <?php
    endif; ?>
                </div>
            </div>
            <?php
endforeach; ?>

            <?php if ($errorFound && strpos($response ?? '', '401') !== false): ?>
            <div class="log-item warning" style="margin-top: 20px;">
                <div class="icon">💡</div>
                <div class="log-text">
                    <strong>Posible solución:</strong> Parece que hay un problema de autenticación (Código 401).<br><br>
                    La API de Hablame v5 requiere normalmente agregar tu <strong>account</strong> a la
                    configuración.<br>
                    Asegúrate de editar el archivo <code>enviar_sms.php</code> y configurar la variable
                    <code>$account</code> con el número de tu cuenta.
                </div>
            </div>
            <?php
endif; ?>
        </div>
    </div>

</body>

</html>