<?php
session_start();
require_once '../includes/config.php';
require_once '../includes/db.php';

// Verificar si hoy es sábado (6 = sábado en PHP)
$es_sabado = (date('w') == 6);

// Si no es sábado, no ejecutar el envío de recordatorios de cuotas vencidas
if (!$es_sabado) {
    echo "Hoy no es sábado. Los recordatorios de cuotas vencidas solo se envían los sábados.";
    exit;
}

// Obtener nombre del comercio y configuración de WhatsApp
$stmt_config = $pdo->query("SELECT nombre_comercio, instance_id, api_token FROM configuracion LIMIT 1");
$config = $stmt_config->fetch(PDO::FETCH_ASSOC);
$mensaje_pie = "\n\nAtentamente,\n*{$config['nombre_comercio']}*";

// Configuración WhatsApp
$instanceId = trim($config['instance_id']);
$apiToken = trim($config['api_token']);

// $instanceId = 31772;
// $apiToken = 'S1p9rtihPNHCM2WP95WLzGB4EWJXEfhXeHIIgz3G9f7d5500';

// Consulta para obtener cuotas con avisos programados (incluyendo vencidas)
$fecha_hoy = date('Y-m-d');
$sql = "SELECT c.*, cli.nombre, cli.apellidos, cli.numero_documento, 
        cli.telefono_principal, cli.telefono_secundario,
        p.titulo as producto_nombre,
        CASE 
            WHEN c.primer_aviso <= CURRENT_DATE AND c.segundo_aviso > CURRENT_DATE THEN 'primer'
            WHEN c.segundo_aviso <= CURRENT_DATE AND c.tercer_aviso > CURRENT_DATE THEN 'segundo'  
            WHEN c.tercer_aviso <= CURRENT_DATE THEN 'tercer'
        END as tipo_aviso,
        DATEDIFF(CURRENT_DATE, c.fecha_vencimiento) as dias_vencido
        FROM cuotas c
        INNER JOIN clientes cli ON c.cliente_id = cli.id_cliente
        INNER JOIN productos p ON c.producto_id = p.id
        WHERE (
            (c.primer_aviso <= CURRENT_DATE AND c.segundo_aviso > CURRENT_DATE) OR
            (c.segundo_aviso <= CURRENT_DATE AND c.tercer_aviso > CURRENT_DATE) OR  
            (c.tercer_aviso <= CURRENT_DATE)
        )
        AND c.estado = 'PENDIENTE'";

$stmt = $pdo->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Filtrar cuotas que ya recibieron aviso HOY
$cuotas_filtradas = [];
foreach($result as $row) {
    $stmt_check = $pdo->prepare("SELECT id FROM avisos_enviados 
                                 WHERE cuota_id = ? AND tipo_aviso = ? AND DATE(fecha_envio) = CURRENT_DATE");
    $stmt_check->execute([$row['id'], $row['tipo_aviso']]);
    
    if ($stmt_check->rowCount() == 0) {
        $cuotas_filtradas[] = $row;
    }
}

foreach($cuotas_filtradas as $row) {
    $mensaje = construirMensaje($row, $mensaje_pie);
    $enviado = false;
    
    // Enviar al teléfono principal si existe
    if(!empty($row['telefono_principal'])) {
        $enviado = enviarWhatsApp($row['telefono_principal'], $mensaje, $instanceId, $apiToken);
    }
    
    // Enviar al teléfono secundario si existe
    if(!empty($row['telefono_secundario'])) {
        $enviado_secundario = enviarWhatsApp($row['telefono_secundario'], $mensaje, $instanceId, $apiToken);
        $enviado = $enviado || $enviado_secundario;
    }
    
    if($enviado) {
        $sql_registro = "INSERT INTO avisos_enviados (cuota_id, tipo_aviso) VALUES (:cuota_id, :tipo_aviso)";
        $stmt_registro = $pdo->prepare($sql_registro);
        $stmt_registro->execute([
            ':cuota_id' => $row['id'],
            ':tipo_aviso' => $row['tipo_aviso']
        ]);

        // Registrar la actividad
        $descripcion = "Se envió {$row['tipo_aviso']} aviso al cliente {$row['nombre']} {$row['apellidos']} ({$row['numero_documento']})";
        registrarActividad('Envío de aviso', $descripcion, $pdo);
    }
}

function construirMensaje($data, $mensaje_pie) {
    $saludo = "Estimad@ *{$data['nombre']} {$data['apellidos']} ({$data['numero_documento']})*";
    $dias_vencido = $data['dias_vencido'];
    
    switch($data['tipo_aviso']) {
        case 'primer':
            if ($dias_vencido > 0) {
                $mensaje = "Su cuota venció hace *{$dias_vencido} día" . ($dias_vencido > 1 ? 's' : '') . "*. Le recordamos que debe regularizar su situación para evitar inconvenientes.";
            } else if ($dias_vencido == 0) {
                $mensaje = "Le recordamos que *HOY* " . date('d/m/Y') . " vence su cuota. Por favor, realice el pago para evitar inconvenientes.";
            } else {
                $mensaje = "Le recordamos que el *" . date('d/m/Y', strtotime($data['fecha_vencimiento'])) . "* debe abonar su cuota para evitar inconvenientes.";
            }
            break;
        case 'segundo':
            if ($dias_vencido > 0) {
                $mensaje = "SEGUNDO AVISO: Su cuota venció hace *{$dias_vencido} día" . ($dias_vencido > 1 ? 's' : '') . "*. Es importante que regularice su pago lo antes posible.";
            } else {
                $mensaje = "Le recordamos que hoy *" . date('d/m/Y') . "* es la fecha de pago de su cuota.";
            }
            break;
        case 'tercer':
            if ($dias_vencido > 0) {
                $mensaje = "ÚLTIMO AVISO: Su cuota venció hace *{$dias_vencido} día" . ($dias_vencido > 1 ? 's' : '') . "*. Debe ponerse al día con su deuda urgentemente para evitar acciones legales.";
            } else {
                $mensaje = "Aún tiene la oportunidad de ponerse al día con su deuda si realiza el pago hoy *" . date('d/m/Y') . "*.";
            }
            break;
    }
    
    $detalle = "\n\n*Detalles de la cuota:*";
    $detalle .= "\n*Producto:* {$data['producto_nombre']}";
    $detalle .= "\n*Número de cuota:* {$data['numero_cuota']}";
    $detalle .= "\n*Fecha de vencimiento:* " . date('d/m/Y', strtotime($data['fecha_vencimiento']));
    
    if ($dias_vencido > 0) {
        $detalle .= "\n*Estado:* VENCIDA ({$dias_vencido} día" . ($dias_vencido > 1 ? 's' : '') . ")";
    } else if ($dias_vencido == 0) {
        $detalle .= "\n*Estado:* VENCE HOY";
    } else {
        $detalle .= "\n*Estado:* PRÓXIMA A VENCER";
    }
    
    return $saludo . "\n\n" . $mensaje . $detalle . $mensaje_pie;
}

function enviarWhatsApp($telefono, $mensaje, $instanceId, $apiToken) {
    $curl = curl_init();
    
    curl_setopt_array($curl, [
        CURLOPT_URL => "https://waapi.app/api/v1/instances/" . $instanceId . "/client/action/send-message",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => json_encode([
            'chatId' => $telefono.'@c.us',
            'message' => $mensaje
        ]),
        CURLOPT_HTTPHEADER => [
            "accept: application/json",
            "authorization: Bearer " . $apiToken,
            "content-type: application/json"
        ],
    ]);

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

    return !$err;
}

function registrarActividad($tipo, $descripcion, $pdo) {
    $usuario_id = $_SESSION['usuario_id'] ?? 1;
    $ip = $_SERVER['REMOTE_ADDR'] ?? '';
    $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
    
    $sql = "INSERT INTO registro_actividad_usuario 
            (id_usuario, tipo_accion, detalles_accion, direccion_ip, agente_usuario) 
            VALUES (:id_usuario, :tipo_accion, :detalles_accion, :direccion_ip, :agente_usuario)";
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        ':id_usuario' => $usuario_id,
        ':tipo_accion' => $tipo,
        ':detalles_accion' => $descripcion,
        ':direccion_ip' => $ip,
        ':agente_usuario' => $user_agent
    ]);
}
?>
