export function formatContractData(rawData: any) {
  const data = { ...rawData };
  
  // Formater le lieu de naissance
  const cob_sans_le = data.employee_cob?.replace(/^Le /, '');
  if (data.employee_cob?.startsWith('Le ')) {
    data.employee_cob_formatted = `au ${cob_sans_le}`;
  } else {
    data.employee_cob_formatted = `à ${data.employee_cob}`;
  }
  
  // Formater la ville
  const ville_sans_le = data.structure_ville?.replace(/^Le /, '');
  if (data.structure_ville?.startsWith('Le ')) {
    data.ville_formatted = `Au ${ville_sans_le}`;
  } else {
    data.ville_formatted = `À ${data.structure_ville}`;
  }
  
  // Formater la CCN
  if (Array.isArray(data.CCN)) {
    data.CCN_formatted = data.CCN.join(', ');
  } else {
    data.CCN_formatted = data.CCN;
  }
  
  // Générer le texte de durée d'engagement
  data.duree_engagement_text = generateDureeEngagementText(data);
  
  // Générer le texte des lieux d'engagement
  data.lieux_engagement_text = generateLieuxEngagementText(data);
  
  // Générer le texte d'absence maladie
  data.absence_maladie_text = generateAbsenceMaladieText(data);
  
  // Générer le texte d'exclusivité
  data.exclusivite_text = generateExclusiviteText(data);
  data.exclusivite_prevenu_text = generateExclusivitePrevenuText(data);
  
  // Générer le texte d'assurances
  data.assurances_text = generateAssurancesText(data);
  
  return data;
}

function generateDureeEngagementText(data: any): string {
  let text = '';
  
  if (data.date_debut === data.date_fin) {
    text = `Le présent engagement couvre la journée du ${data.date_debut}, pour `;
  } else {
    if (data.dates_travaillees) {
      text = `Le présent engagement couvre la période du ${data.date_debut} au ${data.date_fin} pour les dates travaillées suivantes :\n<ul>`;
      const dates = data.dates_travaillees.split(';');
      dates.forEach((date: string, index: number) => {
        text += `<li>- ${date.trim()}${index < dates.length - 1 ? ' ;' : ''}</li>`;
      });
      text += '</ul>\nPour ';
    } else {
      text = `Le présent engagement couvre la période du ${data.date_debut} au ${data.date_fin}. Pour `;
    }
  }
  
  // Ajouter les cachets
  if (data.employee_catpro === 'Artiste') {
    if (data.cachets.representations >= 1 && data.cachets.repetitions >= 1) {
      text += `un total de ${data.cachets.representations} ${data.cachets.representations === 1 ? 'cachet' : 'cachets'} de représentation et ${data.cachets.repetitions} ${data.cachets.repetitions === 1 ? 'service' : 'services'} de répétition.`;
    } else if (data.cachets.representations >= 1 && data.cachets.repetitions === 0) {
      text += `un total de ${data.cachets.representations} ${data.cachets.representations === 1 ? 'cachet' : 'cachets'}`;
      if (data.CCN?.includes('Convention Collective Nationale de la Production Audiovisuelle') || data.CCN?.includes("Convention Collective Nationale de l'Édition")) {
        text += " d'enregistrement.";
      } else {
        text += ' de représentation.';
      }
    } else if (data.cachets.representations === 0 && data.cachets.repetitions >= 1) {
      text += `${data.cachets.repetitions} ${data.cachets.repetitions === 1 ? 'service' : 'services'} de répétition.`;
    }
  } else if (data.employee_catpro === 'Technicien') {
    text += `un total de ${data.cachets.heures} heures de travail`;
    if (data.cachets.heuresparjour === 0) {
      text += '.';
    } else if (data.cachets.heuresparjour >= 1) {
      text += `, à raison de ${data.cachets.heuresparjour} heures par jour de travail.`;
    }
  } else if (data.employee_catpro === 'Metteur en scène') {
    if (data.cachets.representations >= 1 && data.cachets.heures > 0) {
      text += `un total de ${data.cachets.representations} ${data.cachets.representations === 1 ? 'cachet' : 'cachets'} de représentation et ${data.cachets.heures} heures de travail.`;
    } else if (data.cachets.representations === 0) {
      text += `un total de ${data.cachets.heures} heures de travail.`;
    } else if (data.cachets.representations >= 1 && data.cachets.heures === 0) {
      text += `un total de ${data.cachets.representations} ${data.cachets.representations === 1 ? 'cachet' : 'cachets'} de représentation.`;
    }
  }
  
  // Ajouter les détails des répétitions
  if (data.cachets.repetitions >= 1) {
    text += `\n\nLa durée totale des répétitions sera de ${data.cachets.heures} heures`;
    if (data.cachets.heuresparjour === 0) {
      text += '.';
    } else if (data.cachets.heuresparjour >= 1) {
      text += `, à raison de ${data.cachets.heuresparjour} heures par journée de répétition.`;
    }
  }
  
  return text;
}

function generateLieuxEngagementText(data: any): string {
  if (data.CCN?.includes('Convention Collective Nationale de la Production Audiovisuelle') || data.CCN?.includes("Convention Collective Nationale de l'Édition")) {
    return 'de travail';
  } else if (data.cachets.representations >= 1 && data.cachets.repetitions === 0) {
    return 'des représentations';
  } else if (data.cachets.representations === 0 && data.cachets.repetitions >= 1) {
    return 'des répétitions';
  } else if (data.employee_catpro === 'Technicien') {
    return "d'engagement";
  } else if (data.cachets.representations >= 1 && data.cachets.repetitions >= 1) {
    return 'des répétitions et des représentations';
  } else if (data.employee_catpro === 'Metteur en scène' && data.cachets.representations === 0) {
    return "d'exercice de sa fonction";
  }
  return "d'engagement";
}

function generateAbsenceMaladieText(data: any): string {
  if (data.employee_catpro === 'Metteur en scène') {
    return 'ses missions de mise en scène';
  } else if (data.CCN?.includes('Convention Collective Nationale de la Production Audiovisuelle')) {
    return `ses missions de ${data.employee_profession}`;
  } else if (data.CCN?.includes("Convention Collective Nationale de l'Édition")) {
    return 'un enregistrement';
  }
  return 'une répétition ou une représentation';
}

function generateExclusiviteText(data: any): string {
  if (data.employee_catpro === 'Metteur en scène') {
    return 'sur ses lieux de travail et aux répétitions';
  } else if (data.CCN?.includes('Convention Collective Nationale de la Production Audiovisuelle')) {
    return 'sur les lieux de production';
  } else if (data.CCN?.includes("Convention Collective Nationale de l'Édition")) {
    return "sur les lieux d'enregistrement";
  }
  return 'à une répétition ou à une représentation';
}

function generateExclusivitePrevenuText(data: any): string {
  if (data.employee_catpro === 'Metteur en scène') {
    return "de ses horaires et jours de travail et de l'existence de répétitons";
  } else if (data.CCN?.includes('Convention Collective Nationale de la Production Audiovisuelle')) {
    return 'de ses horaires, jours et lieux de travail';
  } else if (data.CCN?.includes("Convention Collective Nationale de l'Édition")) {
    return "de cet session d'enregistrement";
  }
  return "de l'existence de cette répétition ou représentation";
}

function generateAssurancesText(data: any): string {
  if (data.CCN?.includes('Convention Collective Nationale de la Production Audiovisuelle')) {
    return ' à la production audiovisuelle';
  } else if (data.CCN?.includes("Convention Collective Nationale de l'Édition")) {
    return " à l'édition phonographique";
  }
  return ' aux représentations du spectacle';
}
