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

// 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']);

// Consulta para obtener morosos
$sql = "SELECT DISTINCT 
        cli.id_cliente,
        cli.nombre, 
        cli.apellidos, 
        cli.numero_documento,
        cli.telefono_principal, 
        cli.telefono_secundario,
        COUNT(c.id) as total_cuotas_vencidas,
        SUM(c.monto) as deuda_total,
        MIN(c.id) as cuota_id
        FROM cuotas c
        INNER JOIN clientes cli ON c.cliente_id = cli.id_cliente
        LEFT JOIN avisos_enviados ae ON (
            c.id = ae.cuota_id AND 
            ae.tipo_aviso = 'moroso'
            AND DATE(ae.fecha_envio) = CURRENT_DATE
        )
        WHERE c.estado = 'PENDIENTE' 
        AND c.fecha_vencimiento < CURRENT_DATE
        AND ae.id IS NULL
        GROUP BY cli.id_cliente, cli.nombre, cli.apellidos, 
                 cli.numero_documento, cli.telefono_principal, 
                 cli.telefono_secundario";

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

$mensajes_enviados = 0;

foreach($morosos as $moroso) {
    $mensaje = construirMensajeMoroso($moroso, $mensaje_pie);
    $enviado = false;
    
    if(!empty($moroso['telefono_principal'])) {
        $enviado = enviarWhatsApp($moroso['telefono_principal'], $mensaje, $instanceId, $apiToken);
    }
    
    if(!empty($moroso['telefono_secundario'])) {
        $enviado_secundario = enviarWhatsApp($moroso['telefono_secundario'], $mensaje, $instanceId, $apiToken);
        $enviado = $enviado || $enviado_secundario;
    }
    
    if($enviado) {
        $sql_registro = "INSERT INTO avisos_enviados (cuota_id, tipo_aviso) VALUES (:cuota_id, 'moroso')";
        $stmt_registro = $pdo->prepare($sql_registro);
        $stmt_registro->execute([':cuota_id' => $moroso['cuota_id']]);
        $mensajes_enviados++;

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

// Redirigir con mensaje
$mensaje = "Se enviaron " . $mensajes_enviados . " mensajes a clientes morosos.";
header("Location: clientes.php?mensaje=" . urlencode($mensaje) . "&tipo=success&morosos=1");
exit;

function construirMensajeMoroso($data, $mensaje_pie) {
    $saludo = "Estimad@ *{$data['nombre']} {$data['apellidos']} ({$data['numero_documento']})*";
    
    $cuotas = $data['total_cuotas_vencidas'] == 1 ? "cuota" : "cuotas";
    $pendientes = $data['total_cuotas_vencidas'] == 1 ? "pendiente" : "pendientes";
    
    $mensaje = "Le informamos que tiene *{$data['total_cuotas_vencidas']}* {$cuotas} {$pendientes} ";
    $mensaje .= "por un monto total de *Gs. " . number_format($data['deuda_total'], 0, ',', '.') . "*\n\n";
    $mensaje .= "Le invitamos cordialmente a acercarse a nuestras oficinas para regularizar su situación ";
    $mensaje .= "y evitar así posibles inconvenientes legales.";
    
    return $saludo . "\n\n" . $mensaje . $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
    ]);
}
?>
