import { formatDateForInput } from "../components/FormsFieldsTypes";

export enum RGPDRequestType {
  ACCES = "ACCES",
  RECTIFICATION = "RECTIFICATION",
  EFFACEMENT = "EFFACEMENT",
  OPPOSITION = "OPPOSITION",
  LIMITATION = "LIMITATION",
  PORTABILITE = "PORTABILITE"
}

export enum RGPDRequestStatus {
  RECUE = "RECUE",
  EN_COURS = "EN_COURS",
  TERMINEE = "TERMINEE",
  REFUSEE = "REFUSEE",
  EN_RETARD = "EN_RETARD"
}

export enum RGPDRequestChannel {
  EMAIL = "EMAIL",
  TELEPHONE = "TELEPHONE",
  COURRIER = "COURRIER",
  ACCUEIL = "ACCUEIL"
}

export enum RGPDHistoryAction {
  CREATION = "CREATION",
  ASSIGNATION = "ASSIGNATION",
  CHANGEMENT_STATUT = "CHANGEMENT_STATUT",
  EXPORT = "EXPORT",
  ANONYMISATION = "ANONYMISATION",
  CLOTURE = "CLOTURE"
}

export interface RGPDFile {
  id?: number;
  nom: string;
  url?: string;
  typeMime?: string;
  taille?: number;
  date_upload?: string;
}

export interface RGPDHistory {
  id?: number;

  action: RGPDHistoryAction;

  date_action: string;

  commentaire?: string;

  utilisateur_id?: number;

  utilisateur_nom?: string;
}

export interface RGPDRequest {
  id?: number;

  usager_id: number;

  usager_nom?: string;

  usager_prenom?: string;

  dossier_reference?: string;

  type: RGPDRequestType;

  statut: RGPDRequestStatus;

  canal: RGPDRequestChannel;

  description_demande?: string;

  date_reception: string;

  date_limite?: string;

  date_cloture?: string;

  id_assigne_a?: number;

  assigne_a_nom?: string;

  notes_internes?: string;

  reponse_apportee?: string;

  pieces_jointes?: RGPDFile[];

  historique?: RGPDHistory[];
}

export interface RGPDSearchFilters {
  search?: string;

  type?: RGPDRequestType | "";

  statut?: RGPDRequestStatus | "";

  date_debut?: string;

  date_fin?: string;
}

export interface RGPDStats {
  total: number;

  recues: number;

  en_cours: number;

  terminees: number;

  refusees: number;

  en_retard: number;
}

export interface RGPDExportResult {
  success: boolean;

  generatedAt: string;

  format: "PDF" | "JSON";

  downloadUrl?: string;
}

export interface RGPDAnonymisationResult {
  success: boolean;

  usager_id: number;

  date_anonymisation: string;

  commentaire?: string;
}

export interface RGPDFormData {
  usager_id: number | null;

  type: RGPDRequestType | "";

  canal: RGPDRequestChannel | "";

  description_demande: string;

  date_reception: string;

  date_limite: string;

  id_assigne_a?: number | null;

  notes_internes?: string;

  reponse_apportee?: string;

  pieces_jointes?: File[];
}

const today = new Date();
const dateLimite = new Date(today);
dateLimite.setMonth(dateLimite.getMonth() + 1);

export const defaultRGPDFormData: RGPDFormData = {
  usager_id: null,
  type: "",
  canal: "",
  description_demande: "",
  id_assigne_a: null,
  date_reception: formatDateForInput(today),
  date_limite: formatDateForInput(dateLimite),
  notes_internes: "",
  reponse_apportee: "",
  pieces_jointes: []
};