<?php
// cron_enviar_mensajes.php
require_once __DIR__ . '/config.php';

// Obtenemos instancia PDO
$pdo = db();

// 1. Obtener 1 mensaje pendiente de la cola
$ahora = date('Y-m-d H:i:s');

$sql = "
    SELECT id, destinatario, mensaje, prioridad
    FROM mensajes_a_enviar
    WHERE (programado_para IS NULL OR programado_para <= :ahora)
    ORDER BY prioridad ASC, id ASC
    LIMIT 1
";

$stmt = $pdo->prepare($sql);
$stmt->execute([':ahora' => $ahora]);
$row = $stmt->fetch();

if (!$row) {
    echo "No hay mensajes pendientes.\n";
    exit;
}

$id_mensaje = (int)$row['id'];
$telefono   = $row['destinatario'];
$body       = $row['mensaje'];
$priority   = (int)$row['prioridad'];

// 2. Enviar mensaje con UltraMsg
$params = [
    'token'    => ULTRA_TOKEN,
    'to'       => $telefono,
    'body'     => $body,
    'priority' => $priority
];

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL            => "https://api.ultramsg.com/" . ULTRA_INSTANCE_ID . "/messages/chat",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING       => "",
    CURLOPT_MAXREDIRS      => 10,
    CURLOPT_TIMEOUT        => 30,
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST  => "POST",
    CURLOPT_POSTFIELDS     => http_build_query($params),
    CURLOPT_HTTPHEADER     => [
        "content-type: application/x-www-form-urlencoded"
    ],
]);

$response = curl_exec($curl);
$err      = curl_error($curl);
curl_close($curl);

$fecha_envio = date('Y-m-d H:i:s');

if ($err) {
    echo "Error al enviar mensaje ID $id_mensaje a $telefono: $err\n";

    $upd = $pdo->prepare("UPDATE mensajes_a_enviar SET intentos = intentos + 1 WHERE id = :id");
    $upd->execute([':id' => $id_mensaje]);

    exit;
}

// 3. Verificar si el contacto existe; si no, crearlo
$sqlC = "SELECT id FROM contactos WHERE telefono = :tel LIMIT 1";
$stmtC = $pdo->prepare($sqlC);
$stmtC->execute([':tel' => $telefono]);
$contacto_id = $stmtC->fetchColumn();

if (!$contacto_id) {
    $sqlNew = "
        INSERT INTO contactos (telefono, nombre, nota, fecha_alta)
        VALUES (:tel, NULL, NULL, :fecha)
    ";
    $stmtNew = $pdo->prepare($sqlNew);
    $stmtNew->execute([
        ':tel'   => $telefono,
        ':fecha' => $fecha_envio
    ]);
    $contacto_id = $pdo->lastInsertId();
}

// 4. Insertar en charlas como mensaje enviado
$sqlCharla = "
    INSERT INTO charlas (contacto_id, direccion, tipo, mensaje, media_path, fecha)
    VALUES (:cid, 'enviado', 'texto', :msg, NULL, :fecha)
";

$stmtCharla = $pdo->prepare($sqlCharla);
$stmtCharla->execute([
    ':cid'   => $contacto_id,
    ':msg'   => $body,
    ':fecha' => $fecha_envio
]);

// 5. Borrar de la cola
$sqlDel = "DELETE FROM mensajes_a_enviar WHERE id = :id";
$stmtDel = $pdo->prepare($sqlDel);
$stmtDel->execute([':id' => $id_mensaje]);

echo "Mensaje ID $id_mensaje enviado y guardado en charlas. Contacto #$contacto_id\n";

echo "Cron finalizado.\n";
