import type { PageServerLoad } from './$types';
import { redirect } from '@sveltejs/kit';
import { getAuthTokens, authenticatedFetch } from '$lib/server/api';

export const load: PageServerLoad = async ({ fetch, cookies, url, parent }) => {
	// Esperar a que el layout padre valide/refresque el token
	const parentData = await parent();

	// Verificar autenticación
	const { accessToken } = getAuthTokens(cookies);

	if (!accessToken) {
		throw redirect(302, '/login');
	}

	try {
		// Obtener company_id de múltiples fuentes (en orden de prioridad):
		// 1. URL query param (permite cambiar vía navegación)
		// 2. Cookie active_company_id (setted por el team-switcher)
		// 3. Primera compañía del usuario (fallback)
		const companyIdParam = url.searchParams.get('company_id');
		const cookieCompanyId = cookies.get('active_company_id');

		const companyId = companyIdParam
			? parseInt(companyIdParam)
			: cookieCompanyId
				? parseInt(cookieCompanyId)
				: parentData.companies?.[0]?.id;

		// Si aún no hay companyId, mostrar error
		if (!companyId) {
			return {
				items: [],
				total: 0,
				page: 1,
				page_size: 50,
				error: 'No se encontró una compañía seleccionada',
				companies: parentData.companies || []
			};
		}

		// Misma idea que facturas: lista desde API; permisos en cliente vía syncCompanyPermissions + userHasPermission
		const response = await authenticatedFetch(
			`v1/a76/pedimentos?company_id=${companyId}&page=1&page_size=50`,
			{},
			cookies,
			fetch,
			'/login'
		);

		if (!response.ok) {
			const message =
				response.status === 403
					? 'No tiene permiso para ver pedimentos'
					: 'Error al cargar pedimentos';

			return {
				items: [],
				total: 0,
				page: 1,
				page_size: 50,
				error: message,
				companies: parentData.companies || [],
				currentCompanyId: companyId
			};
		}

		const data = await response.json();

		return {
			items: data.items || [],
			total: data.total || 0,
			page: data.page || 1,
			page_size: data.page_size || 50,
			companies: parentData.companies || [],
			currentCompanyId: companyId
		};
	} catch (error) {
		console.error('Error loading pedimentos:', error);
		return {
			items: [],
			total: 0,
			page: 1,
			page_size: 50,
			error: 'Error al cargar pedimentos',
			companies: parentData.companies || []
		};
	}
};
