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

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

    const { accessToken } = getAuthTokens(cookies);

    if (!accessToken) {
        return {
            error: 'No authenticated',
            concepts: {
                items: [],
                total: 0,
                page: 1,
                page_size: 50,
                pages: 0
            }
        };
    }

    try {
        const page = Number(url.searchParams.get('page')) || 1;
        const pageSize = Number(url.searchParams.get('pageSize')) || 50;
        
        const filters: Record<string, string> = {};
        const code = url.searchParams.get('code');
        const description = url.searchParams.get('description');

        if (code) filters.code = code;
        if (description) filters.description = description;

        // Obtener company_id de la cookie o usar el primero disponible
        const cookieCompanyId = cookies.get('active_company_id');
        const companyId = cookieCompanyId 
            ? parseInt(cookieCompanyId)
            : parentData.companies?.[0]?.id;

        if (!companyId) {
            return {
                error: 'No se encontró una compañía seleccionada',
                concepts: {
                    items: [],
                    total: 0,
                    page: 1,
                    page_size: 50,
                    pages: 0
                }
            };
        }

        // Construir URL con parámetros
        const queryParams = new URLSearchParams({
            company_id: companyId.toString(),
            page: page.toString(),
            page_size: pageSize.toString(),
            ...filters
        });

        const response = await authenticatedFetch(
            `v1/a76/concepts/?${queryParams.toString()}`,
            { method: 'GET' },
            cookies,
            fetch
        );

        if (!response.ok) {
            return {
                error: 'Failed to load concepts',
                concepts: {
                    items: [],
                    total: 0,
                    page: page,
                    page_size: pageSize,
                    pages: 0
                }
            };
        }

        const data = await response.json();
        
        return {
            concepts: data
        };
    } catch (error) {
        console.error('Error loading concepts:', error);
        return {
            error: 'Error loading concepts',
            concepts: {
                items: [],
                total: 0,
                page: 1,
                page_size: 50,
                pages: 0
            }
        };
    }
};
