<?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');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

// config.php está en public_html/app-api/config.php
require_once __DIR__ . '/../../config.php';

$body = json_decode(file_get_contents('php://input'), true);
$usuario  = trim($body['usuario']  ?? '');
$password = trim($body['password'] ?? '');

if (empty($usuario) || empty($password)) {
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => 'Usuario y contraseña requeridos']);
    exit;
}

$db = getDB();

// ── 1) Intentar login como ADMIN (usuarios_sist, password MD5) ──────────────
$stmt = $db->prepare(
    "SELECT idusuarios_sist, nombre_usr, rango_idrango
     FROM usuarios_sist
     WHERE nombre_usr = ? AND passwd = MD5(?)
     LIMIT 1"
);
$stmt->execute([$usuario, $password]);
$admin = $stmt->fetch(PDO::FETCH_ASSOC);

// ── 2) Si no es admin, intentar como CENTRO (usuarios_ci, password texto plano) ─
$centro = null;
if (!$admin) {
    $stmt2 = $db->prepare(
        "SELECT idusuarios_ci, nombre, nombre_usr, rango_idrango
         FROM usuarios_ci
         WHERE nombre_usr = ? AND passwd = ? AND centro_activo = 1
         LIMIT 1"
    );
    $stmt2->execute([$usuario, $password]);
    $centro = $stmt2->fetch(PDO::FETCH_ASSOC);
}

if (!$admin && !$centro) {
    // Debug temporal — verificar qué encontró
    $stmtDbg = $db->prepare("SELECT idusuarios_ci, nombre_usr, passwd, centro_activo FROM usuarios_ci WHERE nombre_usr = ? LIMIT 1");
    $stmtDbg->execute([$usuario]);
    $dbgRow = $stmtDbg->fetch(PDO::FETCH_ASSOC);
    http_response_code(401);
    echo json_encode([
        'success' => false,
        'message' => 'Usuario o contraseña incorrectos',
        'debug' => [
            'usuario_buscado' => $usuario,
            'encontrado_en_ci' => $dbgRow ? true : false,
            'centro_activo' => $dbgRow['centro_activo'] ?? null,
            'passwd_match' => $dbgRow ? ($dbgRow['passwd'] === $password) : null,
            'passwd_len_db' => $dbgRow ? strlen($dbgRow['passwd']) : null,
            'passwd_len_input' => strlen($password),
        ]
    ]);
    exit;
}

// ── Determinar role y datos ─────────────────────────────────────────────────
$role      = $admin ? 'admin' : 'centro';
$userId    = $admin ? $admin['idusuarios_sist'] : $centro['idusuarios_ci'];
$userName  = $admin ? $admin['nombre_usr']      : $centro['nombre_usr'];
$rango     = $admin ? $admin['rango_idrango']   : ($centro['rango_idrango'] ?? 0);
$cdId      = $admin ? null                      : (int)$centro['idusuarios_ci'];
$cdNombre  = $admin ? null                      : $centro['nombre'];

// ── Generar token de sesión (válido 8 horas) ────────────────────────────────
$token  = bin2hex(random_bytes(32));
$expira = date('Y-m-d H:i:s', strtotime('+8 hours'));

// Eliminar sesiones anteriores del mismo usuario+role y crear nueva
try {
    $db->prepare("DELETE FROM admin_sessions WHERE idusuarios_sist = ? AND role = ?")
       ->execute([$userId, $role]);
    $db->prepare(
        "INSERT INTO admin_sessions (idusuarios_sist, token, role, cd_id, expira)
         VALUES (?, ?, ?, ?, ?)"
    )->execute([$userId, $token, $role, $cdId, $expira]);
} catch (PDOException $e) {
    // Si fallan las columnas role/cd_id, intentar con tabla original
    $db->prepare("DELETE FROM admin_sessions WHERE idusuarios_sist = ?")->execute([$userId]);
    $db->prepare("INSERT INTO admin_sessions (idusuarios_sist, token, expira) VALUES (?, ?, ?)")
       ->execute([$userId, $token, $expira]);
}

// ── Si es centro, obtener sus módulos asignados ─────────────────────────────
$modulos = [];
if ($role === 'centro') {
    $stmtMod = $db->prepare("SELECT modulo_key FROM cd_modulos WHERE cd_id = ?");
    $stmtMod->execute([$cdId]);
    $modulos = $stmtMod->fetchAll(PDO::FETCH_COLUMN);
}

echo json_encode([
    'success' => true,
    'data' => [
        'token'     => $token,
        'usuario'   => $userName,
        'rango'     => $rango,
        'role'      => $role,
        'cd_id'     => $cdId,
        'cd_nombre' => $cdNombre,
        'modulos'   => $modulos,
        'expira'    => $expira,
    ]
]);
