import { AvvisoInterruzioneMailTag } from "emails/avviso-interruzione";
import {
	ContattoAdminEmailPropsSchema,
	ContattoAdminMailTag,
} from "emails/contatto";
import {
	ContattoAnnuncioMailTag,
	ContattoAnnuncioPropsSchema,
} from "emails/contatto_annuncio";
import {
	ContattoInteressatoMailTag,
	ContattoInteressatoPropsSchema,
} from "emails/email-interessato";
import { GenericMailTag, GenericPropsSchema } from "emails/gereric-email";
import { InterruzioneMailTag } from "emails/interruzione";
import { InvitoMailTag, InvitoPropsSchema } from "emails/invito";
import { PagamentoConfermaMailTag } from "emails/pagamento-conferma";
import { PagamentoErroreMailTag } from "emails/pagamento-errore";
import { PagamentoRicezioneMailTag } from "emails/pagamento-ricezione";
import {
	PwResetLinkMailTag,
	PwResetLinkPropsSchema,
} from "emails/pw-reset-link";
import { RecessoMailTag } from "emails/recesso";
import { RegistrazioneAvvenutaMailTag } from "emails/registrazione-avvenuta";
import {
	SchedaContattoMailTag,
	SchedaContattoPropsSchema,
} from "emails/scheda-annuncio";
import { ServizioAttivatoMailTag } from "emails/servizio-attivato";
import {
	VerificaEmailMailTag,
	VerificaEmailPropsSchema,
} from "emails/VerificaEmail";
import type { ZodSchema, z } from "zod";

export const Templates = {
	[GenericMailTag]: { title: "Email Generica", props: GenericPropsSchema },
	[AvvisoInterruzioneMailTag]: { title: "Avviso Interruzione", props: null },
	[ContattoAnnuncioMailTag]: {
		title: "Contatto Annuncio",
		props: ContattoAnnuncioPropsSchema,
	},
	[ContattoAdminMailTag]: {
		title: "Contatto Amministratore",
		props: ContattoAdminEmailPropsSchema,
	},
	[ContattoInteressatoMailTag]: {
		title: "Contatto Interessato",
		props: ContattoInteressatoPropsSchema,
	},
	[InterruzioneMailTag]: { title: "Interruzione Servizio", props: null },
	[InvitoMailTag]: { title: "Invito al sito", props: InvitoPropsSchema },
	[PagamentoConfermaMailTag]: { title: "Conferma pagamento", props: null },
	[PagamentoErroreMailTag]: { title: "Errore pagamento", props: null },
	[PagamentoRicezioneMailTag]: { title: "Ricezione pagamento", props: null },
	[PwResetLinkMailTag]: {
		title: "Reset password",
		props: PwResetLinkPropsSchema,
	},
	[RecessoMailTag]: { title: "Richiesta di recesso", props: null },
	[RegistrazioneAvvenutaMailTag]: {
		title: "Registrazione avvenuta",
		props: null,
	},
	[SchedaContattoMailTag]: {
		title: "Scheda contatto annuncio",
		props: SchedaContattoPropsSchema,
	},
	[ServizioAttivatoMailTag]: { title: "Servizio Attivato", props: null },
	[VerificaEmailMailTag]: {
		title: "Verifica email",
		props: VerificaEmailPropsSchema,
	},
} satisfies Record<string, { title: string; props: ZodSchema | null }>;

export const TemplateKeys = Object.keys(Templates) as Array<
	keyof typeof Templates
>;

// const TemplateSchemas = Object.entries(Templates)
// 	.map(([_, value]) => value.props)
// 	.filter((schema) => schema !== null);

export type TemplateType = keyof typeof Templates;

export type MailsTemplates = {
	[K in TemplateType]: {
		mailType: K;
	} & ((typeof Templates)[K] extends { props: z.ZodSchema }
		? { props: z.infer<(typeof Templates)[K]["props"]> }
		: { props?: never });
}[TemplateType];
