import { createContext, type ReactNode, useContext } from "react";
import { LoadingPage } from "~/components/loading";
import type { Comuni } from "~/schemas/public/Comuni";
import type { Nazioni } from "~/schemas/public/Nazioni";
import type { Provincie } from "~/schemas/public/Provincie";
import { api } from "~/utils/api";

type CatastoContextType = {
	comuni: Comuni[];
	provincie: Provincie[];
	nazioni: Nazioni[];
};

const CatastoContext = createContext<CatastoContextType | null>(null);

export const CatastoProvider = ({ children }: { children: ReactNode }) => {
	const { data: comuni = [], isLoading: isLoadingComune } =
		api.catasto.getComuni.useQuery();
	const { data: provincie = [], isLoading: isLoadingProvincie } =
		api.catasto.getProvincie.useQuery();
	const { data: nazioni = [], isLoading: isLoadingNazioni } =
		api.catasto.getNazioni.useQuery();

	return (
		<CatastoContext.Provider value={{ comuni, provincie, nazioni }}>
			{isLoadingComune || isLoadingProvincie || isLoadingNazioni ? (
				<LoadingPage />
			) : (
				children
			)}
		</CatastoContext.Provider>
	);
};

export const useCatasto = () => {
	const context = useContext(CatastoContext);

	if (!context) {
		throw new Error("useCatasto must be used within a CatastoProvider");
	}
	return context;
};
