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

export const load: PageServerLoad = async ({ params, cookies, fetch }) => {
	const { accessToken } = getAuthTokens(cookies);

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

	// Obtener el company_id de la cookie para ambas ramas (new y edit)
	const companyId = await getActiveCompanyId(cookies, fetch);

	if (!companyId) {
		throw error(400, 'No se encontró una compañía seleccionada');
	}

	// Si el ID es "new", es una creación
	if (params.id === 'new') {
		try {
			// Call consolidated creation endpoint
			const response = await authenticatedFetch(
				`v1/a76/pedimentos/creation-data?company_id=${companyId}`,
				{},
				cookies,
				fetch
			);

			if (!response.ok) {
				console.error('Error fetching creation data:', response.status);
				if (response.status === 403) {
					throw error(403, 'No tiene permiso para crear pedimentos');
				}
				if (response.status === 401) {
					throw error(401, 'Tu sesión expiró. Vuelve a iniciar sesión.');
				}
				if (response.status === 422) {
					throw error(422, 'Parámetros inválidos para crear pedimento.');
				}
				throw error(response.status, 'No fue posible preparar el formulario de creación.');
			}

			const data = await response.json();

			return {
				pedimento: null,
				pedimentoId: null,
				isCreate: true,
				pedimentoCodes: data.pedimento_codes || [],
				customsSections: data.customs_sections || [],
				customsBrokers: data.customs_brokers || [],
				clients: data.clients || [],
				codePedimentoRegimens: data.code_pedimento_regimens || [],
				transportTypes: data.transport_types || [],
				transportModes: data.transport_modes || [],
				pedimentoTransportCatalog: data.pedimento_transport_catalog || []
			};
		} catch (e) {
			console.error('❌ Error loading new pedimento data:', e);
			if (e && typeof e === 'object' && 'status' in e) {
				throw e;
			}
			throw error(500, 'Error al cargar catálogos de creación');
		}
	}

	const pedimentoId = parseInt(params.id);
	if (isNaN(pedimentoId)) {
		throw error(400, 'ID de pedimento inválido');
	}

	try {
		// Call consolidated edition endpoint
		const response = await authenticatedFetch(
			`v1/a76/pedimentos/${pedimentoId}/edition-data?company_id=${companyId}`,
			{},
			cookies,
			fetch
		);

		if (!response.ok) {
			if (response.status === 404) {
				throw error(404, 'Pedimento no encontrado');
			}
			if (response.status === 401) {
				throw redirect(302, '/login');
			}
			if (response.status === 403) {
				throw error(403, 'No tiene permiso para editar pedimentos');
			}
			throw error(response.status, 'Error al cargar el pedimento');
		}

		const data = await response.json();

		return {
			pedimento: data.pedimento,
			pedimentoId: data.pedimento_id,
			isCreate: false,
			pedimentoCodes: data.pedimento_codes || [],
			customsSections: data.customs_sections || [],
			customsBrokers: data.customs_brokers || [],
			clients: data.clients || [],
			codePedimentoRegimens: data.code_pedimento_regimens || [],
			transportTypes: data.transport_types || [],
			transportModes: data.transport_modes || [],
			pedimentoTransportCatalog: data.pedimento_transport_catalog || []
		};
	} catch (e) {
		console.error('Error loading pedimento:', e);
		if (e instanceof Error && 'status' in e) {
			throw e;
		}
		throw error(500, 'Error al cargar el pedimento');
	}
};
