import { describe, expect, it } from "vitest";
import { CalcolaCodiceFiscale } from "~/lib/codice_fiscale";

// Importa la tua funzione qui
// import { calcolaCF } from './ilTuoFile';

interface TestInput {
	nome: string;
	cognome: string;
	dataNascita: string; // DD/MM/YYYY
	sesso: "M" | "F";
	catasto: string;
}

const testCases: { descrizione: string; input: TestInput; expected: string }[] =
	[
		{
			descrizione: "Caso Francisco (Regola 1-3-4 e Stato Estero)",
			input: {
				nome: "Francisco Guillermo",
				cognome: "Cespedes Catacora",
				dataNascita: "1992-07-13",
				sesso: "M",
				catasto: "Z611",
			},
			expected: "CSPFNC92L13Z611Z",
		},
		{
			descrizione: "Cognome e Nome corti (2 lettere) -> Pad con X",
			input: {
				nome: "Bo",
				cognome: "Fu",
				dataNascita: "1990-01-01",
				sesso: "M",
				catasto: "H501",
			},
			expected: "FUXBOX90A01H501F",
		},
		{
			descrizione: "Cognome solo vocali",
			input: {
				nome: "Luca",
				cognome: "Ao",
				dataNascita: "1985-05-15",
				sesso: "M",
				catasto: "F205",
			},
			expected: "AOXLCU85E15F205Q",
		},
		{
			descrizione: "Femmina + Dicembre (Giorno + 40 e Mese T)",
			input: {
				nome: "Anna",
				cognome: "Rossi",
				dataNascita: "1975-12-31",
				sesso: "F",
				catasto: "L219",
			},
			expected: "RSSNNA75T71L219W",
		},
		{
			descrizione: "Nome con esattamente 3 consonanti (MRT)",
			input: {
				nome: "Marta",
				cognome: "Rossi",
				dataNascita: "1995-02-10",
				sesso: "F",
				catasto: "H501",
			},
			expected: "RSSMRT95B50H501Z",
		},
		{
			descrizione: "Gestione apostrofi e spazi (D'Arco Maria Adele)",
			input: {
				nome: "Maria Adele",
				cognome: "D'Arco",
				dataNascita: "1980-03-05",
				sesso: "F",
				catasto: "A662",
			},
			expected: "DRCMDL80C45A662W",
		},
		{
			descrizione: "Nato nel 2000 (Anno 00)",
			input: {
				nome: "Giuseppe",
				cognome: "Verdi",
				dataNascita: "2000-10-20",
				sesso: "M",
				catasto: "H501",
			},
			expected: "VRDGPP00R20H501M",
		},
	];

describe("Calcolo Codice Fiscale", () => {
	it.each(testCases)("$descrizione", ({ input, expected }) => {
		// const result = calcolaCF(input);
		// expect(result).toBe(expected);

		// Placeholder per la tua funzione
		const { cf, omocodie } = CalcolaCodiceFiscale({
			nome: input.nome,
			cognome: input.cognome,
			dataNascita: new Date(input.dataNascita),
			sesso: input.sesso,
			catasto: input.catasto,
		});

		const allValidCFs = [cf, ...omocodie];
		expect(allValidCFs).toContain(expected);
	});
});
