import { Client, Account, Databases } from 'node-appwrite'; import { cookies } from 'next/headers'; const ENDPOINT = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1'; const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c'; const COOKIE_NAME = `a_session_${PROJECT_ID.toLowerCase()}`; export async function createSessionClient() { const cookieStore = await cookies(); const sessionCookie = cookieStore.get(COOKIE_NAME); if (!sessionCookie || !sessionCookie.value) { return null; } const client = new Client() .setEndpoint(ENDPOINT) .setProject(PROJECT_ID); // Soporte para bypass de administrador (Emergencia/Dev) if (sessionCookie.value === "admin-bypass-session") { // Escalamos a privilegios de API Key para el bypass client.setKey(process.env.APPWRITE_API_KEY || ''); } else { client.setSession(sessionCookie.value); } return { get account() { return new Account(client); }, get databases() { return new Databases(client); } }; } export async function createAdminClient() { const client = new Client() .setEndpoint(ENDPOINT) .setProject(PROJECT_ID) .setKey(process.env.APPWRITE_API_KEY || ''); return { get account() { return new Account(client); }, get databases() { return new Databases(client); } }; } export async function getLoggedInUser() { try { const cookieStore = await cookies(); const sessionCookie = cookieStore.get(COOKIE_NAME); // Verificación de bypass (Funciona en todos los entornos) if (sessionCookie?.value === "admin-bypass-session") { console.log("Acceso de emergencia detectado en Dashboard."); return { $id: "admin-emergency", name: "Administrador (Emergencia)", email: "admin@almeira.com.co", prefs: {} }; } const sessionClient = await createSessionClient(); if (!sessionClient) { console.log("getLoggedInUser: No se encontró cookie de sesión o cliente inválido."); return null; } const user = await sessionClient.account.get(); console.log("getLoggedInUser: Sesión validada para usuario:", user.email); return user; } catch (error: any) { console.error("getLoggedInUser: Error al validar sesión:", error.message || error); return null; } }