<?php
/**
 * cron_reenganche_7dias.php
 *
 * Lógica:
 *  - Toma el día de HOY - 7 días (ej: hoy martes -> martes pasado).
 *  - Busca contactos cuyo PRIMER mensaje recibido histórico ocurrió ese día.
 *  - El script se corre 2 veces al día:
 *        * Antes de las 12: procesa primeros recibidos entre 00:00 y 11:59.
 *        * A partir de las 12: procesa primeros recibidos entre 12:00 y 23:59.
 *    (esto se decide por la hora actual del servidor).
 *  - Para cada contacto:
 *        * Cuenta todos los mensajes (recibidos + enviados) desde ese primer
 *          recibido hasta ahora.
 *        * Si el total es < 5, inserta en mensajes_a_enviar:
 *
 *              "hola, te gustaria que continuemos?  avisame, gracias!"
 *
 * Tabla usada para la cola:
 *  - mensajes_a_enviar (id, destinatario, mensaje, prioridad, programado_para, intentos, creado_en)
 */

error_reporting(E_ALL);
ini_set('display_errors', 1);

require_once __DIR__ . '/config.php';
$pdo = db();

// ----------------------------------------------------------
// 1) Calcular día objetivo (hoy - 7 días) y franja horaria
// ----------------------------------------------------------
$now = new DateTime('now');
$target = clone $now;
$target->modify('-7 days');             // mismo día de la semana pasada
$targetDate = $target->format('Y-m-d'); // yyyy-mm-dd

$hourNow = (int)$now->format('H');

// Si ahora es antes de las 12 -> procesamos 00:00 a 11:59
// Si es 12 o más -> procesamos 12:00 a 23:59
if ($hourNow < 12) {
    $slot = 'am';
    $slotStart = $targetDate . ' 00:00:00';
    $slotEnd   = $targetDate . ' 11:59:59';
} else {
    $slot = 'pm';
    $slotStart = $targetDate . ' 12:00:00';
    $slotEnd   = $targetDate . ' 23:59:59';
}

echo "==== Reenganche 7 días – Fecha objetivo: {$targetDate} – Slot: {$slot} ====\n";

// ----------------------------------------------------------
// 2) Buscar PRIMER mensaje recibido histórico por contacto
//    y quedarnos sólo con los que cayeron en la franja del día objetivo
// ----------------------------------------------------------
//
// min_recibidos: primer recibido de cada contacto (en toda la historia)
// luego filtramos por los que estén entre $slotStart y $slotEnd
//
$sqlPrimeros = "
    SELECT c.id AS contacto_id,
           c.telefono,
           mr.primer_fecha
    FROM contactos c
    INNER JOIN (
        SELECT contacto_id, MIN(fecha) AS primer_fecha
        FROM charlas
        WHERE direccion = 'recibido'
        GROUP BY contacto_id
    ) mr ON mr.contacto_id = c.id
    WHERE mr.primer_fecha BETWEEN :slot_ini AND :slot_fin
      AND (c.nota IS NULL OR c.nota = '')
";


$stmtPrimeros = $pdo->prepare($sqlPrimeros);
$stmtPrimeros->execute([
    ':slot_ini' => $slotStart,
    ':slot_fin' => $slotEnd,
]);

$primeros = $stmtPrimeros->fetchAll(PDO::FETCH_ASSOC);

echo "Contactos nuevos (primer recibido en franja): " . count($primeros) . "\n";

if (!$primeros) {
    echo "No hay contactos para procesar.\n";
    exit;
}

// ----------------------------------------------------------
// 3) Procesar cada contacto
// ----------------------------------------------------------
$mensajeReenganche = "hola, te gustaria que continuemos?  avisame, gracias!";
$insertados = 0;

foreach ($primeros as $row) {
    $contactoId   = (int)$row['contacto_id'];
    $telefono     = trim($row['telefono']);
    $primerFecha  = $row['primer_fecha'];

    if ($contactoId <= 0 || $telefono === '' || !$primerFecha) {
        continue;
    }

    // Normalizar teléfono (igual que en whatsapp.php / UltraMsg)
    $telNorm = str_replace('@c.us', '', $telefono);
    if ($telNorm !== '' && $telNorm[0] !== '+') {
        $telNorm = '+' . $telNorm;
    }

    // 3.1) Contar mensajes totales desde el primer recibido hasta ahora
    $sqlCount = "
        SELECT COUNT(*) 
        FROM charlas
        WHERE contacto_id = :cid
          AND fecha >= :primera
    ";
    $stmtCount = $pdo->prepare($sqlCount);
    $stmtCount->execute([
        ':cid'     => $contactoId,
        ':primera' => $primerFecha,
    ]);
    $totalMsgs = (int)$stmtCount->fetchColumn();

    echo "Contacto {$contactoId} ({$telNorm}) - mensajes desde {$primerFecha}: {$totalMsgs}\n";

    if ($totalMsgs >= 5) {
        echo " -> Conversación con suficiente actividad, no se envía reenganche.\n";
        continue;
    }

    // 3.2) Evitar duplicados:
    //     si ya existe HOY un mensaje igual para ese destinatario, no insertamos.
    $sqlExiste = "
        SELECT COUNT(*) 
        FROM mensajes_a_enviar
        WHERE destinatario = :dest
          AND mensaje = :msg
          AND DATE(creado_en) = CURDATE()
    ";
    $stmtExiste = $pdo->prepare($sqlExiste);
    $stmtExiste->execute([
        ':dest' => $telNorm,
        ':msg'  => $mensajeReenganche,
    ]);
    $yaExiste = (int)$stmtExiste->fetchColumn();

    if ($yaExiste > 0) {
        echo " -> Ya existe hoy un mensaje de reenganche para {$telNorm}, se salta.\n";
        continue;
    }

    // 3.3) Insertar en mensajes_a_enviar
    $sqlInsert = "
        INSERT INTO mensajes_a_enviar
            (destinatario, mensaje, prioridad, programado_para, intentos)
        VALUES
            (:dest, :msg, 10, NULL, 0)
    ";
    $stmtInsert = $pdo->prepare($sqlInsert);
    $stmtInsert->execute([
        ':dest' => $telNorm,
        ':msg'  => $mensajeReenganche,
    ]);

    $insertados++;
    echo " -> Encolado mensaje de reenganche para contacto {$contactoId} ({$telNorm}).\n";
}

echo "Insertados en mensajes_a_enviar: {$insertados}\n";

?>
