<?php
/**
 * dist-perfil.php — Perfil completo de un distribuidor
 * GET /admin/api/dist-perfil.php?id={id_inver}
 *
 * Devuelve: datos personales, bancarios, nivel de red, sponsor
 */
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(['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(['error' => 'Sesión expirada o inválida']);
    exit;
}

$id_inver = (int)($_GET['id'] ?? 0);
if ($id_inver <= 0) {
    http_response_code(400);
    echo json_encode(['error' => 'ID requerido']);
    exit;
}

try {
    // ── 1. Datos del distribuidor ──────────────────────────────────────────
    $stmt = $db->prepare("
        SELECT
            i.*,
            b.nombre AS banco_nombre,
            e.estado AS estado_nombre,
            sp.referencia AS sponsor_ref,
            CONCAT(sp.nombre, ' ', sp.appat, ' ', sp.apmat) AS sponsor_nombre
        FROM inversionista i
        LEFT JOIN banco b ON b.idbanco = i.banco_idbanco
        LEFT JOIN estados e ON e.idestado = i.estado
        LEFT JOIN inversionista sp ON sp.id_inver = i.inversionista_id_inver
        WHERE i.id_inver = ?
    ");
    $stmt->execute([$id_inver]);
    $inv = $stmt->fetch(PDO::FETCH_ASSOC);

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

    // ── 2. Credenciales de acceso (tabla usuario) ──────────────────────────
    $stmtUsr = $db->prepare("
        SELECT usuario, activo
        FROM usuario
        WHERE inversionista_id_inver = ?
        LIMIT 1
    ");
    $stmtUsr->execute([$id_inver]);
    $usuario = $stmtUsr->fetch(PDO::FETCH_ASSOC);

    // ── 3. Direcciones adicionales ─────────────────────────────────────────
    $stmtDir = $db->prepare("
        SELECT id_dir, calle, noExt, noInt, entre1, entre2, referencia, cp, ciudad, estado
        FROM direccionenvio
        WHERE inversionista_id_inver = ?
        ORDER BY id_dir
    ");
    $stmtDir->execute([$id_inver]);
    $direcciones = $stmtDir->fetchAll(PDO::FETCH_ASSOC);

    // ── 4. Resumen de red (primer nivel) ──────────────────────────────────
    $stmtRed = $db->prepare("
        SELECT COUNT(*) AS total_red
        FROM inversionista
        WHERE inversionista_id_inver = ?
    ");
    $stmtRed->execute([$id_inver]);
    $totalRed = (int)$stmtRed->fetchColumn();

    // ── Armar respuesta ────────────────────────────────────────────────────
    $perfil = [
        'id_inver'       => (int)$inv['id_inver'],
        'referencia'     => $inv['referencia']   ?? '',
        'rfc'            => $inv['rfc']           ?? '',
        'nombre'         => $inv['nombre']        ?? '',
        'appat'          => $inv['appat']         ?? '',
        'apmat'          => $inv['apmat']         ?? '',
        'nombre_completo'=> trim(($inv['nombre'] ?? '') . ' ' . ($inv['appat'] ?? '') . ' ' . ($inv['apmat'] ?? '')),
        'email'          => $inv['email']         ?? '',
        'tel1'           => $inv['tel1']          ?? '',
        'tel2'           => $inv['tel2']          ?? '',
        'wa'             => $inv['wa']            ?? '',
        'calle'          => $inv['calle']         ?? '',
        'noExt'          => $inv['noExt']         ?? '',
        'noInt'          => $inv['noInt']         ?? '',
        'entre1'         => $inv['entre1']        ?? '',
        'entre2'         => $inv['entre2']        ?? '',
        'colonia'        => $inv['colonia']       ?? '',
        'ciudad'         => $inv['ciudad']        ?? '',
        'cp'             => $inv['cp']            ?? '',
        'estado'         => $inv['estado_nombre'] ?? $inv['estado'] ?? '',
        'activo'         => (int)($inv['activo']  ?? 0),
        'depo'           => $inv['depo']          ?? '',
        'nocuenta'       => $inv['nocuenta']      ?? '',
        'banco_nombre'   => $inv['banco_nombre']  ?? '',
        'fecha_alta'     => $inv['fecha_alta']    ?? '',
        'sponsor_ref'    => $inv['sponsor_ref']   ?? '',
        'sponsor_nombre' => trim($inv['sponsor_nombre'] ?? ''),
        'nivel'          => (int)($inv['nivel']   ?? 0),
        'puntos_acum'    => (float)($inv['puntos_acum'] ?? 0),
        'total_red_n1'   => $totalRed,
    ];

    echo json_encode([
        'success'     => true,
        'perfil'      => $perfil,
        'usuario'     => $usuario ?: null,
        'direcciones' => $direcciones,
    ], JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['error' => $e->getMessage()]);
}
