import type { AdminOfficer } from "./admin-types";
import { findOfficerByEmail, verifyDevOfficerPassword } from "./dev-seed-users";

const ADMIN_COOKIE = "agnet_admin_token";

export { ADMIN_COOKIE };

export function encodeAdminToken(officer: AdminOfficer): string {
  return `admin.${Buffer.from(JSON.stringify(officer)).toString("base64url")}`;
}

export function decodeAdminToken(token: string | undefined): AdminOfficer | null {
  if (!token?.startsWith("admin.")) return null;
  try {
    return JSON.parse(Buffer.from(token.slice(6), "base64url").toString("utf8"));
  } catch {
    return null;
  }
}

export function verifyAdminCredentials(email: string, password: string): AdminOfficer | null {
  if (!verifyDevOfficerPassword(email, password)) return null;
  return findOfficerByEmail(email) ?? null;
}

export function officerHasPermission(officer: AdminOfficer, permission: AdminOfficer["permissions"][number]): boolean {
  return officer.permissions.includes(permission);
}
