<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

require_once __DIR__ . '/../config.php';

$db = getDB();
$body = json_decode(file_get_contents('php://input'), true);

$rfc    = isset($body['rfc'])    ? strtoupper(trim($body['rfc']))    : '';
$accion = isset($body['accion']) ? trim($body['accion'])             : 'buscar'; // buscar | enviar
$canal  = isset($body['canal'])  ? trim($body['canal'])              : 'email';  // email | sms
$tel    = isset($body['telefono']) ? trim($body['telefono'])         : '';

if (empty($rfc)) {
    echo json_encode(array('success' => false, 'message' => 'RFC requerido'));
    exit;
}

// Buscar inversionista por RFC (nombre_usuario en tabla usuario)
$sql = "SELECT i.id_inver, i.nombre, i.appat, i.apmat, i.email, i.tel1, i.tel2, i.wa,
               u.nom_usr
        FROM inversionista i
        INNER JOIN usuario u ON u.inversionista_id_inver = i.id_inver
        WHERE u.nom_usr = ?
        LIMIT 1";
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $rfc);
$stmt->execute();
$res = $stmt->get_result();
$inv = $res->fetch_assoc();
$stmt->close();

if (!$inv) {
    echo json_encode(array('success' => false, 'message' => 'No se encontró ninguna cuenta con ese RFC'));
    exit;
}

// ---- ACCIÓN: buscar — devolver opciones disponibles ----
if ($accion === 'buscar') {
    $opciones = array();
    if (!empty($inv['email'])) {
        $email = $inv['email'];
        $partes = explode('@', $email);
        $local  = $partes[0];
        $dominio = isset($partes[1]) ? $partes[1] : '';
        $mask   = substr($local, 0, 2) . str_repeat('*', max(0, strlen($local) - 2)) . '@' . $dominio;
        $opciones[] = array('tipo' => 'email', 'valor' => $email, 'label' => $mask);
    }
    if (!empty($inv['tel1'])) {
        $t = $inv['tel1'];
        $opciones[] = array('tipo' => 'sms', 'valor' => $t, 'label' => 'SMS: ****' . substr($t, -4));
    }
    if (!empty($inv['tel2'])) {
        $t = $inv['tel2'];
        $opciones[] = array('tipo' => 'sms', 'valor' => $t, 'label' => 'SMS: ****' . substr($t, -4));
    }
    if (!empty($inv['wa'])) {
        $t = $inv['wa'];
        $opciones[] = array('tipo' => 'sms', 'valor' => $t, 'label' => 'SMS: ****' . substr($t, -4));
    }
    echo json_encode(array('success' => true, 'data' => array('opciones' => $opciones, 'nombre' => $inv['nombre'])));
    exit;
}

// ---- ACCIÓN: enviar — generar y enviar código de 6 dígitos ----
if ($accion === 'enviar') {
    if (empty($canal) || empty($tel)) {
        echo json_encode(array('success' => false, 'message' => 'Canal y teléfono/correo requeridos'));
        exit;
    }

    // Generar código de 6 dígitos
    $codigo = str_pad(rand(0, 999999), 6, '0', STR_PAD_LEFT);
    $expira = date('Y-m-d H:i:s', time() + 600); // 10 minutos

    // Guardar código en tabla verify_codes (crear si no existe)
    $db->query("CREATE TABLE IF NOT EXISTS verify_codes (
        id INT AUTO_INCREMENT PRIMARY KEY,
        id_inver INT NOT NULL,
        tipo VARCHAR(20) NOT NULL,
        codigo VARCHAR(10) NOT NULL,
        expira DATETIME NOT NULL,
        INDEX (id_inver, tipo)
    )");

    // Eliminar códigos anteriores del mismo tipo
    $del = $db->prepare("DELETE FROM verify_codes WHERE id_inver = ? AND tipo = 'recover'");
    $del->bind_param('i', $inv['id_inver']);
    $del->execute();
    $del->close();

    // Insertar nuevo código
    $ins = $db->prepare("INSERT INTO verify_codes (id_inver, tipo, codigo, expira) VALUES (?, 'recover', ?, ?)");
    $ins->bind_param('iss', $inv['id_inver'], $codigo, $expira);
    $ins->execute();
    $ins->close();

    $nombre_completo = $inv['nombre'] . ' ' . $inv['appat'];
    $BREVO_KEY = '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';

    if ($canal === 'email') {
        // Enviar por correo via Brevo
        $asunto  = 'Código de verificación - Real Rich Business';
        $cuerpo  = '<p>Hola <strong>' . htmlspecialchars($nombre_completo) . '</strong>,</p>';
        $cuerpo .= '<p>Tu código de verificación para restablecer tu contraseña es:</p>';
        $cuerpo .= '<h2 style="letter-spacing:8px;color:#1A3C6E;">' . $codigo . '</h2>';
        $cuerpo .= '<p>Este código expira en <strong>10 minutos</strong>.</p>';
        $cuerpo .= '<p>Si no solicitaste este cambio, ignora este mensaje.</p>';

        $payload = json_encode(array(
            'sender'     => array('name' => 'Real Rich Business', 'email' => 'noreply@productosrrb.com'),
            'to'         => array(array('email' => $tel, 'name' => $nombre_completo)),
            'subject'    => $asunto,
            'htmlContent'=> $cuerpo
        ));

        $ch = curl_init('https://api.brevo.com/v3/smtp/email');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'api-key: ' . $BREVO_KEY
        ));
        $resp = curl_exec($ch);
        $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($http >= 200 && $http < 300) {
            $mask = substr($tel, 0, 2) . str_repeat('*', max(0, strpos($tel, '@') - 2)) . substr($tel, strpos($tel, '@'));
            echo json_encode(array('success' => true, 'data' => array('message' => 'Código enviado', 'destino_mask' => $mask)));
        } else {
            echo json_encode(array('success' => false, 'message' => 'Error al enviar correo: ' . $resp));
        }
        exit;
    }

    if ($canal === 'sms') {
        // Limpiar número: quitar todo excepto dígitos y +
        $numero = preg_replace('/[^0-9+]/', '', $tel);
        // Si no tiene código de país, agregar +52 (México)
        if (substr($numero, 0, 1) !== '+') {
            $numero = '+52' . ltrim($numero, '0');
        }

        $sms_payload = json_encode(array(
            'sender'    => 'RRBMexico',
            'recipient' => $numero,
            'content'   => 'RRB: Tu codigo de verificacion es ' . $codigo . '. Expira en 10 min.'
        ));

        $ch = curl_init('https://api.brevo.com/v3/transactionalSMS/sms');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $sms_payload);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'api-key: ' . $BREVO_KEY
        ));
        $resp = curl_exec($ch);
        $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($http >= 200 && $http < 300) {
            $mask = '****' . substr($tel, -4);
            echo json_encode(array('success' => true, 'data' => array('message' => 'Código enviado', 'destino_mask' => $mask)));
        } else {
            echo json_encode(array('success' => false, 'message' => 'Error al enviar SMS: ' . $resp));
        }
        exit;
    }

    echo json_encode(array('success' => false, 'message' => 'Canal no válido'));
}
