import type { Comuni } from "~/schemas/public/Comuni";
import type { Nazioni } from "~/schemas/public/Nazioni";
import type { Provincie } from "~/schemas/public/Provincie";

export const ITALY_CATASTO_CODE = "0000";
const isNazioneCatastoValid = (str: string) => {
	if (str.length !== 4) return false;
	if (str === ITALY_CATASTO_CODE) return true;
	return /^Z[0-9]{3}$/.test(str);
};

const isComuneCatastoValid = (str: string) => {
	if (str.length !== 4) return false;
	return /^[A-Z][0-9]{3}$/.test(str);
};

const getComuneFromCatasto = (
	codice_catasto: string,
	comuni_options: Comuni[],
): Comuni | undefined => {
	return comuni_options.find((c) => c.catasto === codice_catasto);
};

const getNazioneFromCatasto = (
	codice_catasto: string,
	nazioni_options: Nazioni[],
): Nazioni | undefined => {
	return nazioni_options.find((n) => n.catasto === codice_catasto);
};

export const parseDBComune = (
	db_value: string | null,
	comuni: Comuni[],
): Comuni | undefined => {
	if (!db_value) return undefined;
	if (isComuneCatastoValid(db_value)) {
		return getComuneFromCatasto(db_value, comuni);
	}
	return undefined;
};

export const parseDBNazione = (
	db_value: string | null,
	nazioni: Nazioni[],
): Nazioni | undefined => {
	if (!db_value) return undefined;
	if (isNazioneCatastoValid(db_value)) {
		return getNazioneFromCatasto(db_value, nazioni);
	}
	return undefined;
};

export const getProvinciaFromSigla = (
	str: string | null,
	provincie: Provincie[],
): Provincie | undefined => {
	if (!str) return undefined;
	if (str.length !== 2) return undefined;
	return provincie.find((p) => p.sigla === str);
};
