// types/salaires.ts
// Types pour la saisie de salaires par date/représentation/répétition

export type SalaryMode = "global" | "par_date";

export type SalaryType = "Brut" | "Net avant PAS" | "Coût total employeur" | "Minimum conventionnel";

export interface RepresentationSalaryItem {
  index: number;      // Numéro de la représentation (1, 2, 3)
  montant: number;    // Montant en euros
}

export interface RepresentationSalaryDate {
  date: string;               // Format ISO "2025-11-15"
  date_display: string;       // Format d'affichage "15/11"
  items: RepresentationSalaryItem[];
}

export interface RepetitionSalaryItem {
  index: number;      // Numéro du service de répétition
  montant: number;    // Montant en euros
  duree?: 3 | 4;      // Durée en heures (optionnel, pour info)
}

export interface RepetitionSalaryDate {
  date: string;               // Format ISO "2025-11-10"
  date_display: string;       // Format d'affichage "10/11"
  items: RepetitionSalaryItem[];
}

export interface JourTravailSalary {
  date: string;               // Format ISO "2025-11-05"
  date_display: string;       // Format d'affichage "05/11"
  montant: number;            // Montant en euros
  heures?: number;            // Nombre d'heures (optionnel, pour info)
}

export interface SalaireParDate {
  mode: SalaryMode;
  type_salaire: SalaryType;
  representations?: RepresentationSalaryDate[];
  repetitions?: RepetitionSalaryDate[];
  jours_travail?: JourTravailSalary[];
  total_calcule?: number;     // Total calculé automatiquement
}

// Helper pour créer une structure vide
export function createEmptySalaireParDate(
  mode: SalaryMode,
  type_salaire: SalaryType
): SalaireParDate {
  return {
    mode,
    type_salaire,
    representations: [],
    repetitions: [],
    jours_travail: [],
    total_calcule: 0,
  };
}

// Helper pour calculer le total
export function calculateTotalSalaire(data: SalaireParDate): number {
  let total = 0;

  // Représentations
  if (data.representations) {
    for (const dateGroup of data.representations) {
      for (const item of dateGroup.items) {
        total += item.montant || 0;
      }
    }
  }

  // Répétitions
  if (data.repetitions) {
    for (const dateGroup of data.repetitions) {
      for (const item of dateGroup.items) {
        total += item.montant || 0;
      }
    }
  }

  // Jours de travail
  if (data.jours_travail) {
    for (const jour of data.jours_travail) {
      total += jour.montant || 0;
    }
  }

  return total;
}
