import { NextResponse, type NextRequest } from "next/server";
import { createServerClient, type CookieOptions } from "@supabase/ssr";

export type SessionSnapshot = {
  response: NextResponse;
  isAuthed: boolean;
  userEmail: string | null;
  isConfigured: boolean;
};

export const updateSession = async (req: NextRequest): Promise<SessionSnapshot> => {
  const response = NextResponse.next({ request: req });

  const url = process.env.NEXT_PUBLIC_SUPABASE_URL;
  const anonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;
  if (!url || !anonKey) {
    return {
      response,
      isAuthed: false,
      userEmail: null,
      isConfigured: false,
    };
  }

  const supabase = createServerClient(url, anonKey, {
      cookies: {
        getAll: () => req.cookies.getAll(),
        setAll: (
          cookiesToSet: Array<{
            name: string;
            value: string;
            options?: CookieOptions;
          }>,
        ) => {
          cookiesToSet.forEach(({ name, value, options }) => {
            response.cookies.set(name, value, options);
          });
        },
      },
  });

  const { data } = await supabase.auth.getUser();
  return {
    response,
    isAuthed: Boolean(data?.user),
    userEmail: data.user?.email ?? null,
    isConfigured: true,
  };
};
