import { goto } from "$app/navigation";
import { resolve } from "$app/paths";
import { redirect, type RequestEvent } from "@sveltejs/kit";
import { CURRENT_DID_KEY, CURRENT_HANDLE_KEY } from "./accounts";
import type { Auth } from "../auth.svelte";

export interface RequireAuthResult {
	did: string;
	handle: string;
}

const loginWithReturn = (returnUrl: string): string =>
	`/login?return_url=${encodeURIComponent(returnUrl)}`;

export const requireAuth = (event: RequestEvent): RequireAuthResult => {
	const did = event.cookies.get(CURRENT_DID_KEY);
	if (!did) {
		redirect(302, loginWithReturn(event.url.pathname + event.url.search));
	}
	return { did, handle: event.cookies.get(CURRENT_HANDLE_KEY) ?? did };
};

export const requireAuthClient = (auth: Auth, url: URL): boolean => {
	if (auth.currentDid) return true;
	void goto(resolve(loginWithReturn(url.pathname + url.search) as "/login"), {
		replaceState: true
	});
	return false;
};
