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

export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => {
    await parent();
    const { accessToken } = getAuthTokens(cookies);
    
    if (!accessToken) {
        return { error: 'No authenticated', oma_units: { 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;

        const parentData = await parent();
        const cookieCompanyId = cookies.get('active_company_id');
        const companyId = cookieCompanyId 
            ? parseInt(cookieCompanyId)
            : parentData.companies?.[0]?.id;

        const queryParams = new URLSearchParams({ 
            company_id: companyId.toString(),
            page: page.toString(), 
            page_size: pageSize.toString(), 
            ...filters 
        });
        const response = await authenticatedFetch(`v1/a76/units-of-measure/oma/?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch);

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

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