/**
 * TEMPLATES ULTRA-DÉTAILLÉS POUR ZONES CLIMATIQUES AFRICAINES
 * Système le plus ambitieux d'Afrique - Adaptation climatique précise
 */

import { TypeChantierTemplate, PhaseTemplate } from '../components/phases/PhaseGenerationWizard';
import { MATERIAUX_BTP_DATABASE, CalculateurBTPAfrique } from './materiaux-database';

// ================== ZONES CLIMATIQUES AFRICAINES ==================

export interface ZoneClimatiqueAfrique {
  id: string;
  nom: string;
  pays: string[];
  caracteristiques: {
    temperatureMoyenne: { min: number; max: number };
    pluviometrieAnnuelle: number; // mm
    humiditeRelative: { min: number; max: number }; // %
    ventsMaximaux: number; // km/h
    saisons: {
      nom: string;
      mois: number[];
      contraintes: string[];
      recommandations: string[];
    }[];
  };
  contraintesConstruction: {
    fondations: string[];
    drainage: string[];
    ventilation: string[];
    materiaux: string[];
  };
  normesSpecifiques: {
    sisimique?: string;
    cyclonique?: string;
    thermique: string;
    pluviale: string;
  };
}

export const ZONES_CLIMATIQUES: ZoneClimatiqueAfrique[] = [
  {
    id: 'sahel',
    nom: 'Zone Sahélienne',
    pays: ['Mali', 'Burkina Faso', 'Niger', 'Tchad', 'Sénégal Nord'],
    caracteristiques: {
      temperatureMoyenne: { min: 15, max: 45 },
      pluviometrieAnnuelle: 200,
      humiditeRelative: { min: 20, max: 60 },
      ventsMaximaux: 80,
      saisons: [
        {
          nom: 'Saison sèche froide',
          mois: [12, 1, 2],
          contraintes: ['Harmattan violent', 'Poussière intense', 'Écarts thermiques'],
          recommandations: ['Protection anti-poussière', 'Cure béton renforcée']
        },
        {
          nom: 'Saison sèche chaude', 
          mois: [3, 4, 5],
          contraintes: ['Chaleur extrême 45°C+', 'Évaporation rapide', 'Dilatation'],
          recommandations: ['Travail tôt/tard', 'Arrosage constant', 'Protection solaire']
        },
        {
          nom: 'Saison des pluies',
          mois: [6, 7, 8, 9],
          contraintes: ['Pluies torrentielles', 'Inondations', 'Humidité'],
          recommandations: ['Drainage prioritaire', 'Stockage étanche', 'Planning adapté']
        }
      ]
    },
    contraintesConstruction: {
      fondations: [
        'Fondations profondes (sol gonflant)',
        'Drainage périphérique obligatoire',
        'Protection contre remontées capillaires'
      ],
      drainage: [
        'Évacuation eaux pluviales surdimensionnée',
        'Pentes toitures minimum 40%',
        'Caniveaux périmétriques'
      ],
      ventilation: [
        'Ventilation traversante obligatoire',
        'Ouvertures hautes/basses',
        'Protection solaire systématique'
      ],
      materiaux: [
        'Résistance UV renforcée',
        'Dilatation thermique prévue',
        'Protection anti-poussière'
      ]
    },
    normesSpecifiques: {
      thermique: 'Isolation thermique obligatoire',
      pluviale: 'Évacuation 150mm/h minimum'
    }
  },

  {
    id: 'guinee-forestiere',
    nom: 'Zone Guinéenne Forestière',
    pays: ['Côte d\'Ivoire Sud', 'Ghana Sud', 'Guinée', 'Liberia', 'Sierra Leone'],
    caracteristiques: {
      temperatureMoyenne: { min: 22, max: 32 },
      pluviometrieAnnuelle: 2000,
      humiditeRelative: { min: 70, max: 95 },
      ventsMaximaux: 60,
      saisons: [
        {
          nom: 'Grande saison sèche',
          mois: [12, 1, 2, 3],
          contraintes: ['Harmattan modéré', 'Humidité résiduelle'],
          recommandations: ['Séchage matériaux prolongé', 'Ventilation renforcée']
        },
        {
          nom: 'Grande saison des pluies',
          mois: [4, 5, 6, 7, 8, 9, 10],
          contraintes: ['Pluies quasi-permanentes', 'Humidité 95%', 'Moisissures'],
          recommandations: ['Étanchéité absolue', 'Anti-moisissures', 'Drainage maximal']
        }
      ]
    },
    contraintesConstruction: {
      fondations: [
        'Imperméabilisation obligatoire',
        'Vide sanitaire ventilé minimum 60cm',
        'Drainage français complet'
      ],
      drainage: [
        'Double évacuation eaux pluviales',
        'Pentes toitures minimum 45%',
        'Gouttières surdimensionnées'
      ],
      ventilation: [
        'VMC obligatoire zones humides',
        'Ventilation haute continue',
        'Déshumidification naturelle'
      ],
      materiaux: [
        'Traitement anti-moisissures systématique',
        'Résistance humidité permanente',
        'Matériaux imputrescibles privilégiés'
      ]
    },
    normesSpecifiques: {
      thermique: 'Isolation humidité prioritaire',
      pluviale: 'Évacuation 200mm/h minimum'
    }
  },

  {
    id: 'cotiere-atlantique',
    nom: 'Zone Côtière Atlantique',
    pays: ['Sénégal Côte', 'Gambie', 'Guinée Bissau', 'Mauritanie Sud'],
    caracteristiques: {
      temperatureMoyenne: { min: 18, max: 35 },
      pluviometrieAnnuelle: 800,
      humiditeRelative: { min: 60, max: 85 },
      ventsMaximaux: 120,
      saisons: [
        {
          nom: 'Saison fraîche',
          mois: [12, 1, 2, 3],
          contraintes: ['Alizés forts', 'Embruns salés', 'Corrosion'],
          recommandations: ['Protection anticorrosion renforcée', 'Matériaux marins']
        },
        {
          nom: 'Saison chaude',
          mois: [4, 5, 6],
          contraintes: ['Chaleur humide', 'Évaporation marine'],
          recommandations: ['Ventilation marine', 'Protection UV marine']
        },
        {
          nom: 'Hivernage',
          mois: [7, 8, 9, 10],
          contraintes: ['Pluies + vents', 'Tempêtes', 'Infiltrations'],
          recommandations: ['Étanchéité renforcée', 'Résistance cyclonique']
        }
      ]
    },
    contraintesConstruction: {
      fondations: [
        'Fondations anti-corrosion marines',
        'Drainage anti-sel',
        'Imperméabilisation renforcée'
      ],
      drainage: [
        'Évacuation résistante embruns',
        'Pentes adaptées vents',
        'Matériaux inoxydables'
      ],
      ventilation: [
        'Résistance vents 120 km/h',
        'Protection embruns salés',
        'Ventilation anti-corrosion'
      ],
      materiaux: [
        'Aciers galvanisés ou inox obligatoires',
        'Béton haute résistance chlorures',
        'Peintures marines exclusivement'
      ]
    },
    normesSpecifiques: {
      thermique: 'Isolation marine spécialisée',
      pluviale: 'Évacuation 180mm/h + résistance vents',
      cyclonique: 'Résistance vents 150 km/h'
    }
  }
];

// ================== TEMPLATES ULTRA-DÉTAILLÉS PAR ZONE ==================

export const TEMPLATES_AFRIQUE_DETAILLES: TypeChantierTemplate[] = [
  
  // ========== VILLA MODERNE ZONE SAHÉLIENNE ==========
  {
    id: 'villa-moderne-sahel',
    nom: 'Villa Moderne - Zone Sahélienne',
    description: 'Villa bioclimatique adaptée climat sahélien - Résistance chaleur/harmattan',
    categorie: 'RESIDENTIEL',
    complexiteMetier: 'COMPLEXE',
    dureeGlobaleEstimee: 240, // jours
    budgetGlobalEstime: 450000, // USD
    nombreTotalPhases: 18,
    tags: ['Sahel', 'Bioclimatique', 'Anti-harmattan', 'Isolation thermique'],
    
    phases: [
      {
        id: 'vs-01',
        nom: 'Études Géotechniques Sahéliennes',
        description: 'Analyse sols gonflants, nappe phréatique, contraintes climatiques',
        ordre: 1,
        dureeEstimee: 15,
        budgetEstime: 25000,
        competencesRequises: ['Géotechnicien sols africains', 'Hydrogéologue'],
        prerequis: ['Permis construire', 'Bornage terrain'],
        categorieMetier: 'GROS_OEUVRE',
        obligatoire: true,
        personnalisable: false,
        sousPhases: [
          {
            id: 'vs-01-01',
            nom: 'Sondages géotechniques',
            description: 'Minimum 3 sondages jusqu\'à 8m - identification argiles gonflantes',
            ordre: 1,
            dureeEstimee: 5,
            budgetEstime: 12000,
            competencesRequises: ['Sondeur géotechnique'],
            obligatoire: true
          },
          {
            id: 'vs-01-02', 
            nom: 'Essais laboratoire sols',
            description: 'Limites Atterberg, CBR, gonflement, perméabilité',
            ordre: 2,
            dureeEstimee: 7,
            budgetEstime: 8000,
            competencesRequises: ['Laboratoire géotechnique'],
            obligatoire: true
          },
          {
            id: 'vs-01-03',
            nom: 'Recommandations fondations',
            description: 'Dimensionnement fondations adaptées sol gonflant',
            ordre: 3,
            dureeEstimee: 3,
            budgetEstime: 5000,
            competencesRequises: ['Ingénieur géotechnicien'],
            obligatoire: true
          }
        ]
      },

      {
        id: 'vs-02',
        nom: 'Terrassement et Fondations Anti-Gonflantes',
        description: 'Terrassement adapté, fondations sur sol gonflant, drainage',
        ordre: 2,
        dureeEstimee: 20,
        budgetEstime: 45000,
        competencesRequises: ['Terrassier spécialisé', 'Maçon béton armé', 'Draineur'],
        prerequis: ['Études géotechniques validées'],
        categorieMetier: 'GROS_OEUVRE',
        obligatoire: true,
        personnalisable: true,
        sousPhases: [
          {
            id: 'vs-02-01',
            nom: 'Décapage sélectif',
            description: 'Décapage 50cm + substitution matériaux inertes',
            ordre: 1,
            dureeEstimee: 5,
            budgetEstime: 15000,
            competencesRequises: ['Terrassier', 'Contrôleur matériaux'],
            obligatoire: true
          },
          {
            id: 'vs-02-02',
            nom: 'Fondations profondes',
            description: 'Semelles filantes BA avec longrines - 1,2m profondeur minimum',
            ordre: 2,
            dureeEstimee: 10,
            budgetEstime: 25000,
            competencesRequises: ['Ferrailleur', 'Coffreur', 'Bétonnier'],
            obligatoire: true
          },
          {
            id: 'vs-02-03',
            nom: 'Drainage périphérique',
            description: 'Drain français + regard + évacuation - protection gonflement',
            ordre: 3,
            dureeEstimee: 5,
            budgetEstime: 5000,
            competencesRequises: ['Draineur', 'Canalisateur'],
            obligatoire: true
          }
        ]
      },

      {
        id: 'vs-03',
        nom: 'Vide Sanitaire Ventilé Anti-Termites',
        description: 'VS hauteur 60cm minimum, ventilé, traité anti-termites',
        ordre: 3,
        dureeEstimee: 12,
        budgetEstime: 28000,
        competencesRequises: ['Maçon', 'Traitement bois', 'Ventilation'],
        prerequis: ['Fondations terminées'],
        categorieMetier: 'GROS_OEUVRE',
        obligatoire: true,
        personnalisable: false,
        sousPhases: [
          {
            id: 'vs-03-01',
            nom: 'Murs vide sanitaire',
            description: 'Murs agglos 15cm avec ventilations - 4 ventilations mini par face',
            ordre: 1,
            dureeEstimee: 6,
            budgetEstime: 15000,
            competencesRequises: ['Maçon'],
            obligatoire: true
          },
          {
            id: 'vs-03-02',
            nom: 'Traitement anti-termites',
            description: 'Traitement chimique sol + barrière physique Termimesh',
            ordre: 2,
            dureeEstimee: 3,
            budgetEstime: 8000,
            competencesRequises: ['Applicateur agréé termites'],
            obligatoire: true
          },
          {
            id: 'vs-03-03',
            nom: 'Hourdi ventilé',
            description: 'Plancher poutrelles/hourdis avec isolation réfléchissante',
            ordre: 3,
            dureeEstimee: 3,
            budgetEstime: 5000,
            competencesRequises: ['Poseur plancher'],
            obligatoire: true
          }
        ]
      },

      {
        id: 'vs-04',
        nom: 'Élévation Murs - Système Bioclimatique',
        description: 'Murs double cloison isolante - orientation optimisée climat sahélien',
        ordre: 4,
        dureeEstimee: 25,
        budgetEstime: 55000,
        competencesRequises: ['Maçon qualifié', 'Isolateur thermique'],
        prerequis: ['Vide sanitaire achevé'],
        categorieMetier: 'GROS_OEUVRE',
        obligatoire: true,
        personnalisable: true,
        sousPhases: [
          {
            id: 'vs-04-01',
            nom: 'Mur extérieur porteur',
            description: 'Agglos 15cm - Résistance thermique climat sahélien',
            ordre: 1,
            dureeEstimee: 12,
            budgetEstime: 25000,
            competencesRequises: ['Maçon'],
            obligatoire: true
          },
          {
            id: 'vs-04-02',
            nom: 'Isolation thermique',
            description: 'Isolation réfléchissante + laine roche 10cm - R≥3',
            ordre: 2,
            dureeEstimee: 8,
            budgetEstime: 18000,
            competencesRequises: ['Isolateur thermique'],
            obligatoire: true
          },
          {
            id: 'vs-04-03',
            nom: 'Mur intérieur + lame air',
            description: 'Cloison placoplatre + lame air ventilée 5cm',
            ordre: 3,
            dureeEstimee: 5,
            budgetEstime: 12000,
            competencesRequises: ['Plaquiste'],
            obligatoire: true
          }
        ]
      },

      {
        id: 'vs-05',
        nom: 'Charpente Anti-Harmattan Renforcée',
        description: 'Charpente métallique galvanisée - résistance vents violents 100km/h',
        ordre: 5,
        dureeEstimee: 15,
        budgetEstime: 35000,
        competencesRequises: ['Charpentier métallique', 'Soudeur qualifié'],
        prerequis: ['Murs terminés'],
        categorieMetier: 'GROS_OEUVRE',
        obligatoire: true,
        personnalisable: true,
        sousPhases: [
          {
            id: 'vs-05-01',
            nom: 'Structure primaire',
            description: 'Fermes métalliques galvanisées - espacement 3m max',
            ordre: 1,
            dureeEstimee: 8,
            budgetEstime: 20000,
            competencesRequises: ['Charpentier métallique'],
            obligatoire: true
          },
          {
            id: 'vs-05-02',
            nom: 'Pannes et contre-ventements',
            description: 'Pannes acier + contreventements anti-soulèvement',
            ordre: 2,
            dureeEstimee: 4,
            budgetEstime: 8000,
            competencesRequises: ['Charpentier'],
            obligatoire: true
          },
          {
            id: 'vs-05-03',
            nom: 'Fixations renforcées',
            description: 'Ancrages chimiques + boulons HA - résistance arrachement',
            ordre: 3,
            dureeEstimee: 3,
            budgetEstime: 7000,
            competencesRequises: ['Fixateur qualifié'],
            obligatoire: true
          }
        ]
      }

      // [CONTINUE AVEC LES 13 AUTRES PHASES ULTRA-DÉTAILLÉES...]
    ]
  },

  // ========== IMMEUBLE R+4 ZONE CÔTIÈRE ==========
  {
    id: 'immeuble-r4-cotier',
    nom: 'Immeuble R+4 - Zone Côtière Atlantique',
    description: 'Immeuble résistant embruns salés, vents forts, corrosion marine',
    categorie: 'RESIDENTIEL',
    complexiteMetier: 'EXPERT',
    dureeGlobaleEstimee: 360,
    budgetGlobalEstime: 850000,
    nombreTotalPhases: 22,
    tags: ['Côtier', 'Anti-corrosion', 'Embruns', 'Vents forts', 'R+4'],
    
    phases: [
      {
        id: 'ic-01',
        nom: 'Études Spécialisées Environnement Marin',
        description: 'Études corrosion, vents, fondations marines, impact environnemental',
        ordre: 1,
        dureeEstimee: 30,
        budgetEstime: 45000,
        competencesRequises: ['Ingénieur maritime', 'Géotechnicien côtier', 'Climatologue'],
        prerequis: ['Permis construire', 'Étude impact'],
        categorieMetier: 'GROS_OEUVRE',
        obligatoire: true,
        personnalisable: false,
        sousPhases: [
          {
            id: 'ic-01-01',
            nom: 'Étude corrosion marine',
            description: 'Analyse agressivité chlorures, pH, résistivité sols',
            ordre: 1,
            dureeEstimee: 10,
            budgetEstime: 15000,
            competencesRequises: ['Spécialiste corrosion marine'],
            obligatoire: true
          },
          {
            id: 'ic-01-02',
            nom: 'Étude vents et cyclones',
            description: 'Rose des vents, pressions dynamiques, calculs structure',
            ordre: 2,
            dureeEstimee: 12,
            budgetEstime: 18000,
            competencesRequises: ['Ingénieur calcul vent'],
            obligatoire: true
          },
          {
            id: 'ic-01-03',
            nom: 'Géotechnique marine',
            description: 'Sondages marins, battage, liquéfaction, tassements',
            ordre: 3,
            dureeEstimee: 8,
            budgetEstime: 12000,
            competencesRequises: ['Géotechnicien maritime'],
            obligatoire: true
          }
        ]
      }

      // [AUTRES PHASES ULTRA-DÉTAILLÉES POUR ZONE CÔTIÈRE...]
    ]
  }

  // [CONTINUER AVEC TOUS LES AUTRES TEMPLATES...]
];

// ================== CALCULATEUR SPÉCIALISÉ AFRIQUE ==================

export class CalculateurAfriqueDetaille extends CalculateurBTPAfrique {
  
  /**
   * Calcul spécialisé pour fondations sols gonflants (Sahel)
   */
  static calculerFondationsSolsGonflants(params: {
    surface: number; // m²
    chargesBatiment: number; // tonnes
    gonflementPrevu: number; // % (généralement 2-8%)
    profondeurHorsGel: number; // m
    zoneClimatique: string;
  }) {
    
    const { surface, chargesBatiment, gonflementPrevu, profondeurHorsGel, zoneClimatique } = params;
    
    // Profondeur fondations selon gonflement
    let profondeurRequise = Math.max(profondeurHorsGel, 1.2);
    if (gonflementPrevu > 4) profondeurRequise += 0.3;
    if (gonflementPrevu > 6) profondeurRequise += 0.5;
    
    // Surface semelles (approximation 10% surface bâtiment)
    const surfaceSemelles = surface * 0.10;
    
    // Volume béton semelles + longrines
    const volumeBetonSemelles = surfaceSemelles * 0.4; // 40cm hauteur moyenne
    const volumeBetonLongrines = surface * 0.15 * 0.3 * 0.4; // périmètre × section
    const volumeBetonTotal = volumeBetonSemelles + volumeBetonLongrines;
    
    // Béton haute résistance pour sols agressifs
    const betonC30 = this.calculerBetonArme({
      longueur: Math.sqrt(surface),
      largeur: Math.sqrt(surface),
      epaisseur: profondeurRequise * 100,
      typeOuvrage: 'DALLE',
      classeBeton: 'C30/37', // Résistance chimique
      classeExposition: 'XC4', // Agression chimique modérée
      acierType: 'FeE500'
    });
    
    // Drainage spécialisé
    const longueurDrainagePE = surface * 0.5; // 0.5ml/m²
    const volumeGravierDrainage = longueurDrainagePE * 0.3 * 0.3; // m³
    
    // Matériaux anti-gonflement
    const volumeSubstitution = surface * 0.5; // 50cm substitution
    const gravierConcasse = volumeSubstitution * 1.7; // tonnes (densité 1.7)
    
    return {
      fondations: {
        profondeur: profondeurRequise,
        volumeBeton: volumeBetonTotal,
        materiaux: betonC30.materiaux,
        acierRequis: Math.ceil(volumeBetonTotal * 120) // 120kg/m³ pour fondations
      },
      drainage: {
        longueurTubes: longueurDrainagePE,
        gravierDrainant: Math.ceil(volumeGravierDrainage),
        regardsVisite: Math.ceil(longueurDrainagePE / 20) // 1 regard/20ml
      },
      substitution: {
        volumeDecapage: volumeSubstitution,
        gravierSubstitution: Math.ceil(gravierConcasse),
        geotextile: Math.ceil(surface * 1.1) // +10% recouvrements
      },
      specifications: {
        classeBeton: 'C30/37 XC4',
        enrobage: '4cm minimum',
        acierType: 'FeE500 galvanisé recommandé',
        drainage: 'PE 100mm perforé + géotextile'
      }
    };
  }

  /**
   * Calcul toiture anti-cyclonique (zone côtière)
   */
  static calculerToitureAntiCyclonique(params: {
    surface: number; // m²
    hauteurBatiment: number; // m
    ventMaxPrevus: number; // km/h
    formeToiture: 'TERRASSE' | 'PENTE_FAIBLE' | 'PENTE_FORTE';
    expositionVent: 'PROTEGE' | 'NORMAL' | 'EXPOSE';
  }) {
    
    const { surface, hauteurBatiment, ventMaxPrevus, formeToiture, expositionVent } = params;
    
    // Pression dynamique vent (formule Eurocode)
    const vitesseVent = ventMaxPrevus / 3.6; // m/s
    const pressionVent = 0.613 * Math.pow(vitesseVent, 2); // Pa
    
    // Coefficients selon exposition
    const coeffExposition = {
      'PROTEGE': 0.8,
      'NORMAL': 1.0,
      'EXPOSE': 1.3
    };
    
    const pressionCalcul = pressionVent * coeffExposition[expositionVent];
    
    // Force arrachement totale
    const forceArrachement = surface * pressionCalcul; // N
    
    // Nombre fixations nécessaires (sécurité 2.5)
    const resistanceFixation = 2000; // N par fixation (ancrage chimique)
    const nombreFixations = Math.ceil(forceArrachement * 2.5 / resistanceFixation);
    
    // Espacement fixations
    const espacementFixations = Math.min(
      Math.sqrt(surface / nombreFixations),
      0.6 // maximum 60cm
    );
    
    // Matériaux structure
    let epaisseurDalle = 15; // cm minimum
    if (ventMaxPrevus > 150) epaisseurDalle = 20;
    if (ventMaxPrevus > 200) epaisseurDalle = 25;
    
    const betonToiture = this.calculerBetonArme({
      longueur: Math.sqrt(surface),
      largeur: Math.sqrt(surface),
      epaisseur: epaisseurDalle,
      typeOuvrage: 'DALLE',
      classeBeton: 'C35/45', // Haute résistance
      classeExposition: 'XS3', // Embruns marins
      acierType: 'FeE500'
    });
    
    // Étanchéité renforcée
    const surfaceEtancheite = surface * 1.15; // +15% relevés
    const epaisseurEtancheite = ventMaxPrevus > 180 ? 2 : 1.5; // mm
    
    return {
      calculs: {
        pressionVent: Math.round(pressionCalcul),
        forceArrachement: Math.round(forceArrachement / 1000), // kN
        nombreFixations,
        espacementFixations: Math.round(espacementFixations * 100) // cm
      },
      structure: {
        epaisseurDalle: epaisseurDalle,
        materiaux: betonToiture.materiaux,
        armatureSpeciale: 'Treillis soudé + cadres anti-poinçonnement'
      },
      fixations: {
        type: 'Ancrages chimiques M12 longueur 150mm',
        nombre: nombreFixations,
        espacement: `${Math.round(espacementFixations * 100)}cm`,
        couple: 'Couple serrage 85 Nm'
      },
      etancheite: {
        surface: Math.ceil(surfaceEtancheite),
        type: `Membrane EPDM ${epaisseurEtancheite}mm`,
        fixationSpeciale: 'Fixation mécanique + collage',
        lestage: ventMaxPrevus > 200 ? 'Lestage graviers 50kg/m²' : 'Non requis'
      },
      evacuation: {
        nombreEP: Math.ceil(surface / 50), // 1 EP par 50m²
        diametreEP: ventMaxPrevus > 150 ? 125 : 100, // mm
        tropPlein: 'Obligatoire si surface >200m²'
      }
    };
  }
}

export default TEMPLATES_AFRIQUE_DETAILLES;