<?php
/**
 * distribuidores-detalle.php — Detalle de un distribuidor + cadena de 5 patrocinadores
 * GET /admin/api/distribuidores-detalle.php?id=ID_INVER
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Authorization, Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }

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

// ── Validar token ────────────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
if (!preg_match('/Bearer\s+(.+)/i', $authHeader, $m)) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Token requerido']);
    exit;
}
$token = trim($m[1]);
$stmtTok = $db->prepare("SELECT idusuarios_sist FROM admin_sessions WHERE token = ? AND expira > NOW()");
$stmtTok->execute([$token]);
if (!$stmtTok->fetch()) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Sesión inválida o expirada']);
    exit;
}

// ── Parámetros ───────────────────────────────────────────────────────────────
$id = (int)($_GET['id'] ?? 0);
if (!$id) {
    echo json_encode(['ok' => false, 'error' => 'ID requerido']);
    exit;
}

// ── Datos del distribuidor ───────────────────────────────────────────────────
$stmt = $db->prepare("
    SELECT
        i.id_inver        AS id_inv,
        i.referencia,
        i.nombre,
        i.appat,
        i.apmat,
        i.rfc,
        i.email,
        i.tel1            AS telefono,
        i.tel2            AS celular,
        i.wa              AS whatsapp,
        i.domicilio,
        i.colonia,
        i.ciudad,
        e.nombre          AS estado,
        i.cp,
        i.fecha_nac,
        i.estampa         AS fecha_registro,
        i.idprom          AS id_patrocinador,
        i.estados_idestado AS id_estado,
        i.pais_idpais      AS id_pais,
        u.nom_usr         AS usuario,
        u.passw           AS contrasena
    FROM inversionista i
    LEFT JOIN usuario u ON u.inversionista_id_inver = i.id_inver
    LEFT JOIN estados e ON e.idestado = i.estados_idestado
    WHERE i.id_inver = ?
");
$stmt->execute([$id]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$row) {
    echo json_encode(['ok' => false, 'error' => 'Distribuidor no encontrado']);
    exit;
}

// ── Cadena de patrocinadores (5 niveles hacia arriba) ────────────────────────
$patrocinadores = [];
$currentId = (int)($row['id_patrocinador'] ?? 0);
$nivel = 1;

while ($currentId > 0 && $nivel <= 5) {
    $stmtPat = $db->prepare("
        SELECT id_inver, idprom, referencia, rfc,
               CONCAT(COALESCE(nombre,''), ' ', COALESCE(appat,''), ' ', COALESCE(apmat,'')) AS nombre_completo
        FROM inversionista
        WHERE id_inver = ?
    ");
    $stmtPat->execute([$currentId]);
    $pat = $stmtPat->fetch(PDO::FETCH_ASSOC);
    if (!$pat) break;

    $patrocinadores[] = [
        'nivel'          => $nivel,
        'id_inv'         => (int)$pat['id_inver'],
        'referencia'     => $pat['referencia']     ?? '-',
        'rfc'            => $pat['rfc']            ?? '-',
        'nombre_completo'=> trim($pat['nombre_completo'] ?? '-'),
    ];

    $currentId = (int)($pat['idprom'] ?? 0);
    $nivel++;
}

// Quitar id_patrocinador de la respuesta principal (ya está en la cadena)
unset($row['id_patrocinador']);

echo json_encode([
    'ok'             => true,
    'distribuidor'   => $row,
    'patrocinadores' => $patrocinadores,
]);
