import { createCookieSessionStorage, redirect } from "@remix-run/node";

const SESSION_SECRET = process.env.SESSION_SECRET || "cleanserp-admin-secret-change-me";

const sessionStorage = createCookieSessionStorage({
  cookie: {
    name: "admin_session",
    httpOnly: true,
    maxAge: 60 * 60 * 24, // 24 hours
    path: "/",
    sameSite: "lax",
    secrets: [SESSION_SECRET],
    secure: process.env.NODE_ENV === "production",
  },
});

export async function requireAdmin(request: Request): Promise<void> {
  const session = await sessionStorage.getSession(
    request.headers.get("Cookie"),
  );

  if (!session.get("isAdmin")) {
    throw redirect("/admin/login");
  }
}

export async function loginAdmin(
  password: string,
): Promise<string | null> {
  const adminPassword = process.env.ADMIN_PASSWORD;

  if (!adminPassword) {
    console.error("ADMIN_PASSWORD not set in environment variables");
    return null;
  }

  if (password !== adminPassword) {
    return null;
  }

  const session = await sessionStorage.getSession();
  session.set("isAdmin", true);

  return sessionStorage.commitSession(session);
}

export async function logoutAdmin(request: Request): Promise<string> {
  const session = await sessionStorage.getSession(
    request.headers.get("Cookie"),
  );

  return sessionStorage.destroySession(session);
}
