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

try {
    // 1) Datos del form
    $contactoId = isset($_POST['contacto_id']) ? (int)$_POST['contacto_id'] : 0;
    $mensaje    = isset($_POST['mensaje']) ? trim($_POST['mensaje']) : '';

    if ($contactoId <= 0 || $mensaje === '') {
        throw new Exception('Contacto o mensaje vacío');
    }

    // 2) Buscar teléfono del contacto
    $pdo = db();
    $sql = "SELECT telefono FROM contactos WHERE id = :id LIMIT 1";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':id' => $contactoId]);
    $telefono = $stmt->fetchColumn();

    if (!$telefono) {
        throw new Exception('No se encontró el contacto en la BD');
    }

    // 3) Preparar envío con UltraMsg
    $instanceId = ULTRAMSG_INSTANCE_ID;
    $token      = ULTRAMSG_TOKEN;

    // UltraMsg acepta: teléfono en formato internacional (549...) O chatID (549...@c.us)
    // Como vos guardás "5493..." sin @c.us, se puede mandar directo:
    $to   = $telefono;
    $body = $mensaje;

    $url = "https://api.ultramsg.com/{$instanceId}/messages/chat";

    $params = [
        'token' => $token,
        'to'    => $to,
        'body'  => $body,
        // 'priority' => 10,
        // 'referenceId' => 'panel_php'
    ];

    // Llamada a UltraMsg
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => http_build_query($params),
    ]);
    $response = curl_exec($ch);
    $err      = curl_error($ch);
    curl_close($ch);

    // Guardar log de respuesta por las dudas
    file_put_contents(
        __DIR__ . '/debug_send_ultramsg.log',
        date('Y-m-d H:i:s') . " - TO: {$to} - BODY: {$body}\nRESP: {$response}\nERR: {$err}\n\n",
        FILE_APPEND
    );

    // 4) Ver si aparentemente se envió OK
    $sent = false;
    if ($err) {
        $sent = false;
    } else {
        $arr = json_decode($response, true);
        // UltraMsg responde algo tipo {"sent":"true","message":"ok","id":497}
        if (is_array($arr) && isset($arr['sent']) && ($arr['sent'] === true || $arr['sent'] === 'true')) {
            $sent = true;
        } else {
            // aunque no venga 'sent', si no hubo error de red, lo damos como enviado/queued
            $sent = true;
        }
    }

    // 5) Guardar también en la tabla charlas como "enviado"
    $sql = "INSERT INTO charlas (contacto_id, direccion, tipo, mensaje, media_path, fecha)
            VALUES (:cid, 'enviado', 'texto', :msg, NULL, NOW())";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        ':cid' => $contactoId,
        ':msg' => $mensaje,
    ]);

    // 6) Volver al chat
    // Podés mostrar error si $sent == false, pero igual el mensaje queda en la BD
    header('Location: whatsapp.php?contacto_id=' . $contactoId);
    exit;

} catch (Throwable $e) {
    // Error básico
    echo "ERROR al enviar: " . $e->getMessage();
}
