import { redirect } from '@sveltejs/kit';
import type { PageServerLoad } from './$types';
import { clearAuthTokens } from '$lib/server/api';
import {
	getWorkspaceLoginUrl,
	readWorkspaceReturnPath,
	storeReturnPath,
	redirectToKeycloakAuthorization,
	redirectToKeycloakLogin
} from '$lib/server/workspace-auth';

export const load: PageServerLoad = async ({ cookies, url }) => {
	console.error('[LOGIN] url.pathname:', url.pathname, '| params:', Object.fromEntries(url.searchParams));
	clearAuthTokens(cookies);

	// Workspace redirige de vuelta aquí con ?sso_verified=1 después de que el usuario
	// se autenticó en Workspace (que usa el mismo Keycloak central).
	// En ese momento la sesión KC ya existe en el browser → prompt=none funciona sin
	// mostrar ninguna pantalla de login.
	if (url.searchParams.get('sso_verified') === '1') {
		const existingReturnPath = readWorkspaceReturnPath(cookies, '');
		const intendedPath =
			existingReturnPath && existingReturnPath !== '/login'
				? existingReturnPath
				: (url.searchParams.get('redirect') || '/dashboard');

		storeReturnPath(cookies, intendedPath);
		redirectToKeycloakAuthorization(url.origin, intendedPath);
	}

	// El Hub devolvió ?redirect= sin sso_verified=1.
	// Ir directo a Keycloak SIN prompt=none para romper el loop Hub↔login:
	// - KC tiene sesión activa → devuelve código al callback → éxito.
	// - KC no tiene sesión → muestra el form de login → callback → éxito.
	const redirectParam = url.searchParams.get('redirect');
	if (redirectParam) {
		const existingReturnPath = readWorkspaceReturnPath(cookies, '');
		const intendedPath =
			existingReturnPath && existingReturnPath !== '/login'
				? existingReturnPath
				: redirectParam;
		storeReturnPath(cookies, intendedPath);
		redirectToKeycloakLogin(url.origin, intendedPath);
	}

	// Primera visita sin ningún parámetro → guardar destino y mandar al workspace.
	storeReturnPath(cookies, '/dashboard');
	throw redirect(303, getWorkspaceLoginUrl(url.origin));
};
