<?php
/**
 * kyc-lista.php
 * GET → Lista distribuidores con KYC enviado (isVip = 1, 2 o filtro)
 * GET ?filtro=pendiente  → solo isVip = 2 (en revisión)
 * GET ?filtro=aprobado   → solo isVip = 1
 * GET ?filtro=todos      → todos los que tienen archivos subidos
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
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;
}

// ── Filtro ────────────────────────────────────────────────────────────────────
$filtro = $_GET['filtro'] ?? 'pendiente';

// Construir condición WHERE según filtro
switch ($filtro) {
    case 'aprobado':
        $where = 'WHERE i.isVip = 1';
        break;
    case 'rechazado':
        $where = 'WHERE i.isVip = 3';
        break;
    case 'todos':
        $where = 'WHERE i.isVip IN (1, 2, 3)';
        break;
    case 'pendiente':
    default:
        $where = 'WHERE i.isVip = 2';
        break;
}

// ── Consulta principal ────────────────────────────────────────────────────────
$stmt = $db->query("
    SELECT
        i.id_inver,
        i.referencia,
        i.nombre,
        i.appat,
        i.apmat,
        i.rfc,
        i.email,
        i.isVip,
        i.estampa AS fecha_registro
    FROM inversionista i
    {$where}
    ORDER BY i.id_inver DESC
    LIMIT 200
");
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

// ── Verificar existencia de archivos en el servidor ───────────────────────────
// Los archivos están en: public_html/app-api/uploads/kyc/{id_inver}/
// Desde admin/api/ subimos dos niveles: ../../uploads/kyc/
$baseUploadPath = dirname(__DIR__, 2) . '/uploads/kyc/';
$baseUploadUrl  = '/app-api/uploads/kyc/';  // URL pública relativa

$result = [];
foreach ($rows as $row) {
    $id   = (int)$row['id_inver'];
    $dir  = $baseUploadPath . $id . '/';

    // Buscar archivos INE y selfie con extensiones comunes
    $ineFile     = null;
    $selfieFile  = null;
    $extraFiles  = [];

    if (is_dir($dir)) {
        $files = scandir($dir);
        foreach ($files as $f) {
            if ($f === '.' || $f === '..') continue;
            $lower = strtolower($f);
            if (str_contains($lower, 'ine') || str_contains($lower, 'identificacion') || str_contains($lower, 'id_')) {
                $ineFile = $f;
            } elseif (str_contains($lower, 'selfie') || str_contains($lower, 'foto')) {
                $selfieFile = $f;
            } else {
                $extraFiles[] = $f;
            }
        }
        // Si no se detectó por nombre, asignar por orden
        if (!$ineFile && !$selfieFile && count($files) >= 2) {
            $validFiles = array_values(array_filter($files, fn($f) => $f !== '.' && $f !== '..'));
            $ineFile    = $validFiles[0] ?? null;
            $selfieFile = $validFiles[1] ?? null;
        }
    }

    $result[] = [
        'id_inver'       => $id,
        'referencia'     => $row['referencia']  ?? '',
        'nombre'         => trim(($row['nombre'] ?? '') . ' ' . ($row['appat'] ?? '') . ' ' . ($row['apmat'] ?? '')),
        'rfc'            => $row['rfc']          ?? '',
        'email'          => $row['email']        ?? '',
        'isVip'          => (int)$row['isVip'],
        'fecha_registro' => $row['fecha_registro'] ?? '',
        'tiene_archivos' => is_dir($dir),
        'ine_url'        => $ineFile    ? ($baseUploadUrl . $id . '/' . $ineFile)    : null,
        'selfie_url'     => $selfieFile ? ($baseUploadUrl . $id . '/' . $selfieFile) : null,
        'extra_archivos' => $extraFiles,
    ];
}

echo json_encode(['ok' => true, 'kyc' => $result, 'total' => count($result)]);
