import Programs from '@/admin/pages/programs/programs';
import { programCategoriesQuery } from '@/admin/queries/program-categories';
import { programsQuery } from '@/admin/queries/programs';
import { parseEnum, parsePositiveInt, sanitizeSearchParams } from '@/lib/utils';
import { createFileRoute } from '@tanstack/react-router';

const PROGRAM_STATUSES = ['active', 'draft', 'any'] as const;

export const Route = createFileRoute('/_app/programs/')({
	validateSearch: (search) =>
		sanitizeSearchParams(search, (r) => ({
			status:
				parseEnum<(typeof PROGRAM_STATUSES)[number]>(
					r.status,
					PROGRAM_STATUSES,
				) || 'any',
			category_id: parsePositiveInt(r.category_id),
		})),

	loaderDeps: ({ search }) => search,

	loader: ({ context, deps }) =>
		Promise.all([
			context.queryClient.ensureQueryData(
				programsQuery({
					page: deps.page,
					per_page: deps.per_page,
					search: deps.search || undefined,
					status: deps.status !== 'any' ? deps.status : undefined,
					category_id: deps.category_id,
				}),
			),
			context.queryClient.ensureQueryData(programCategoriesQuery()),
		]),

	component: Programs,
});
