import { getDb } from './db';
import { cookies } from 'next/headers';
import {
  ADMIN_SESSION_COOKIE_NAME,
  getAdminSessionSecret,
  unsignSessionId,
} from './admin-session-cookie';
import type { AdminSessionRow } from './db-types';

export async function getAuthenticatedAdmin(): Promise<AdminSessionRow | null> {
  const cookieStore = await cookies();
  const signedValue = cookieStore.get(ADMIN_SESSION_COOKIE_NAME)?.value;
  if (!signedValue) return null;

  const sessionId = unsignSessionId(signedValue, getAdminSessionSecret());
  if (!sessionId) {
    // Ungueltiges/expired Cookie aktiv entfernen, damit der Browser es nicht
    // bei jedem Admin-Request erneut mitschickt.
    cookieStore.delete(ADMIN_SESSION_COOKIE_NAME);
    return null;
  }

  const db = getDb();
  const session = db.prepare(
    `SELECT s.*, u.username FROM admin_sessions s
     JOIN admin_users u ON u.id = s.admin_user_id
     WHERE s.id = ? AND s.expires_at > datetime('now')`
  ).get(sessionId) as AdminSessionRow | undefined;

  if (!session) {
    cookieStore.delete(ADMIN_SESSION_COOKIE_NAME);
    return null;
  }

  return session;
}
