/** Vocabulaire du domaine, aligné sur le schéma SQLite et les modèles pydantic. */

export type Statut =
	| 'promulguee'
	| 'adoptee_non_promulguee'
	| 'saisie_cc'
	| 'validee_cc'
	| 'censuree_partiellement'
	| 'navette'
	| 'deposee_non_examinee'
	| 'annoncee'
	| 'rejetee';

export type TypeTexte =
	| 'loi'
	| 'loi_organique'
	| 'pjl'
	| 'ppl'
	| 'ordonnance'
	| 'decision_cc'
	| 'decret'
	| 'accord_international';

export type Theme =
	| 'justice'
	| 'securite'
	| 'numerique'
	| 'social'
	| 'fiscal'
	| 'environnement'
	| 'agriculture'
	| 'sante'
	| 'memoire_patrimoine'
	| 'outre_mer'
	| 'economie'
	| 'migration'
	| 'institutions';

export type Public = 'individus' | 'associations' | 'entreprises';
export type SensImpact = 'positif' | 'negatif' | 'mixte' | 'neutre';
export type Pertinence = 'forte' | 'moyenne' | 'faible';
export type Confiance = 'high' | 'medium' | 'low';
export type RegimeLibertes = 'droits_plus' | 'controle_plus' | 'mixte' | 'neutre';

export interface Impact {
	sens: SensImpact;
	note: string;
}

export interface Source {
	url: string;
	titre: string | null;
	editeur: string | null;
	date_publication: string | null;
	tier: 'T1' | 'T2';
	extrait_verbatim: string | null;
	contexte: string | null;
	confiance: Confiance | null;
	marqueur: string | null;
	fichier_origine: string | null;
}

export interface Evenement {
	date_evenement: string;
	type_etape: string;
	description: string;
	source_url: string | null;
	previsionnel: 0 | 1;
}

export interface DecisionCC {
	numero_affaire: string;
	date_saisine: string | null;
	date_decision: string | null;
	resultat: string | null;
	saisissants: string | null;
	resume: string | null;
	url: string | null;
	date_decision_attendue: string | null;
}

export interface Texte {
	id: string;
	numero_officiel: string | null;
	type: TypeTexte;
	titre_court: string;
	titre_officiel: string | null;
	statut: Statut;
	statut_date: string | null;
	date_depot: string | null;
	date_adoption: string | null;
	date_promulgation: string | null;
	date_entree_vigueur: string | null;
	prochaine_echeance: string | null;
	prochaine_echeance_label: string | null;
	themes: Theme[];
	impacts: Partial<Record<Public, Impact>>;
	regime_libertes: RegimeLibertes | null;
	regime_libertes_note: string | null;
	guadeloupe_pertinence: Pertinence | null;
	guadeloupe_note: string | null;
	resume: string | null;
	points_cles: string[];
	confiance: Confiance;
	source_seed: string | null;
	a_verifier: 0 | 1;
	motif_verification: string | null;
	derniere_verif: string | null;
	nb_sources: number;
	nb_evenements: number;
	devant_cc: 0 | 1;
	/** Extrait surligné, présent uniquement sur les résultats de recherche. */
	extrait?: string | null;
}

export interface TexteDetaille extends Texte {
	sources: Source[];
	evenements: Evenement[];
	decisions_cc: DecisionCC[];
}

export interface Echeance {
	id: number;
	code: string;
	date_echeance: string;
	libelle: string;
	description: string | null;
	portee: 'nationale' | 'texte';
	texte_id: string | null;
	concerne_guadeloupe: 0 | 1 | null;
	note_guadeloupe: string | null;
	previsionnel: 0 | 1;
	source_url: string | null;
	source_extrait: string | null;
}

export interface Insight {
	numero: number;
	titre: string;
	corps: string;
	implications: string | null;
	confiance: string;
	derive_de: string[];
}

export interface Facette {
	valeur: string;
	libelle: string;
	nombre: number;
	actif: boolean;
}

export interface Filtres {
	q: string;
	statut: string[];
	theme: string[];
	type: string[];
	impact: string[];
	guadeloupe: string[];
	confiance: string[];
	from: string | null;
	to: string | null;
	tri: 'date' | 'pertinence';
	page: number;
}

export interface Resultats {
	textes: Texte[];
	total: number;
	page: number;
	pages: number;
	facettes: {
		statut: Facette[];
		theme: Facette[];
		type: Facette[];
		guadeloupe: Facette[];
		impact: Facette[];
		confiance: Facette[];
	};
}
