import { redirect, fail } from '@sveltejs/kit';
import type { Actions, PageServerLoad } from './$types';
import { clearAuthTokens, setAuthTokens, getServerApiUrl } from '$lib/server/api';



export const load: PageServerLoad = async ({ cookies, url }) => {
	// Si hay un parámetro 'logout' en la URL, limpiar las cookies
	if (url.searchParams.has('logout')) {
		clearAuthTokens(cookies);
		return {};
	}

	// Limpiar siempre las cookies de sesión anterior al cargar login
	// Esto evita que se queden datos del tenant anterior
	clearAuthTokens(cookies);

	// Permitir acceso al login sin redirigir automáticamente
	// Esto evita bucles de redirección cuando el token existe pero puede estar expirado
	return {};
};

export const actions = {
	default: async ({ request, cookies, url, fetch }) => {
		const data = await request.formData();
		const username = data.get('username')?.toString();
		const password = data.get('password')?.toString();
		const tenant_slug = data.get('tenant_slug')?.toString();

		if (!username || !password || !tenant_slug) {
			return fail(400, { error: 'Credenciales incorrectas' });
		}

		try {
			const apiUrl = getServerApiUrl();
			const loginUrl = `${apiUrl}v1/auth/login`;

			const requestBody = {
				username,
				password,
				tenant_slug
			};

			const response = await fetch(loginUrl, {
				method: 'POST',
				headers: {
					'Content-Type': 'application/json'
				},
				body: JSON.stringify(requestBody)
			});

			const result = await response.json();

			if (!response.ok) {
				return fail(response.status, {
					error: result.detail || 'Error de autenticación',
					username,
					tenant_slug
				});
			}

			if (result.access_token) {
				// Establecer tokens usando la función centralizada
				setAuthTokens(cookies, result.access_token, result.refresh_token);

				// Redirigir al dashboard o a la URL original
				const redirectUrl = url.searchParams.get('redirect') || '/dashboard';
				throw redirect(303, redirectUrl);
			}

			return fail(500, { error: 'No se recibió token de autenticación' });
		} catch (error) {
			// Si es un redirect de SvelteKit, re-lanzarlo
			if (error && typeof error === 'object' && 'status' in error && 'location' in error) {
				throw error;
			}

			return fail(500, {
				error: 'Error de conexión con el servidor: ' + (error instanceof Error ? error.message : String(error)),
				username,
				tenant_slug
			});
		}
	}
} satisfies Actions;
