import { cookies } from "next/headers";
import type { NextResponse } from "next/server";
import { signSessionToken, verifySessionToken, type SessionTokenPayload } from "./jwt";

export const SESSION_COOKIE_NAME = "ai_web_command_session";
export const SESSION_MAX_AGE_SECONDS = 60 * 60 * 24 * 7;

const cookieOptions = {
  httpOnly: true,
  sameSite: "lax" as const,
  secure: process.env.NODE_ENV === "production",
  path: "/",
  maxAge: SESSION_MAX_AGE_SECONDS,
};

export function createSessionToken(payload: SessionTokenPayload) {
  return signSessionToken(payload);
}

export function createSessionCookieValue(payload: SessionTokenPayload) {
  return {
    name: SESSION_COOKIE_NAME,
    value: createSessionToken(payload),
    options: cookieOptions,
  };
}

export function setSessionCookie(response: NextResponse, payload: SessionTokenPayload) {
  const cookie = createSessionCookieValue(payload);
  response.cookies.set(cookie.name, cookie.value, cookie.options);
}

export function clearSessionCookie(response: NextResponse) {
  response.cookies.set(SESSION_COOKIE_NAME, "", {
    ...cookieOptions,
    maxAge: 0,
  });
}

export async function getSessionToken() {
  const cookieStore = await cookies();
  return cookieStore.get(SESSION_COOKIE_NAME)?.value ?? null;
}

export async function getSession() {
  const token = await getSessionToken();

  if (!token) {
    return null;
  }

  return verifySessionToken(token);
}
