/**
 * BASE DE DONNÉES ULTRA-DÉTAILLÉE DES MATÉRIAUX BTP
 * Système le plus ambitieux d'Afrique - Tous les détails techniques
 * Spécifications pour climat tropical, normes africaines, calculs précis
 */

// ================== TYPES DE BASE ==================

export interface DimensionsTechniques {
  longueur: number; // mm
  largeur: number;  // mm
  hauteur: number;  // mm
  epaisseur?: number; // mm
  diametre?: number; // mm pour tubes, fers ronds
  rayonCourbure?: number; // mm pour éléments courbes
  tolerance: number; // mm - tolérance de fabrication
}

export interface ProprietesPhysiques {
  densite: number; // kg/m³
  resistanceCompression: number; // MPa
  resistanceTraction: number; // MPa
  resistanceFlexion: number; // MPa
  moduleElasticite: number; // GPa
  coefficientDilatation: number; // /°C
  absorptionEau: number; // %
  porosite: number; // %
  conductiviteThermique: number; // W/m.K
  resistanceGel: boolean;
  resistanceIntemperies: 'EXCELLENT' | 'BON' | 'MOYEN' | 'FAIBLE';
}

export interface SpecificationsClimatiques {
  temperatureMin: number; // °C
  temperatureMax: number; // °C
  humiditeMax: number; // %
  resistanceUV: 'EXCELLENT' | 'BON' | 'MOYEN' | 'FAIBLE';
  resistancePluie: 'EXCELLENT' | 'BON' | 'MOYEN' | 'FAIBLE';
  resistanceVentFort: boolean;
  adaptationSaison: {
    saison: 'SECHE' | 'PLUIES' | 'HARMATTAN';
    recommandations: string[];
  }[];
}

export interface NormesAfricaines {
  norme: string; // ex: "NF EN 197-1", "ASTM C150", "BS 12"
  classification: string;
  certificationRequise: boolean;
  organismeControle: string[];
  testsObligatoires: string[];
  marquageCE: boolean;
  conformiteEAC?: boolean; // East African Community
  conformiteECOWAS?: boolean; // Economic Community of West African States
  conformiteSADC?: boolean; // Southern African Development Community
}

export interface CalculsQuantification {
  uniteBase: string; // m², m³, kg, pièce, ml
  facteurPerte: number; // % de perte normale
  facteurSurapprovisionnement: number; // % de marge sécurité
  modeFourniture: 'VRAC' | 'PALETTE' | 'SACS' | 'PIECES';
  conditionnement: {
    quantiteParUnite: number;
    poidsUnitaire: number; // kg
    dimensionsEmballage: DimensionsTechniques;
  };
  calculAutomatique: {
    formule: string; // formule de calcul automatique
    parametres: string[]; // paramètres nécessaires
  };
}

export interface MaterielBTP {
  id: string;
  nom: string;
  categorie: 'GROS_OEUVRE' | 'SECOND_OEUVRE' | 'FINITIONS' | 'ISOLATION' | 'ETANCHEITE' | 'EQUIPEMENTS';
  sousCategorie: string;
  
  // Spécifications techniques détaillées
  dimensions: DimensionsTechniques;
  proprietes: ProprietesPhysiques;
  climatique: SpecificationsClimatiques;
  normes: NormesAfricaines;
  quantification: CalculsQuantification;
  
  // Informations commerciales
  marques: {
    nom: string;
    origine: string;
    certifie: boolean;
    prix: {
      devise: 'XOF' | 'XAF' | 'USD' | 'EUR';
      montant: number;
      unite: string;
    }[];
  }[];
  
  fournisseurs: {
    nom: string;
    pays: string;
    ville: string;
    delaiLivraison: number; // jours
    quantiteMinimale: number;
    conditions: string[];
  }[];
  
  // Mise en œuvre
  miseEnOeuvre: {
    outillageNecessaire: string[];
    competencesRequises: string[];
    tempsUnitaire: number; // minutes par unité
    conditionsMeteo: string[];
    temperatureOptimale: { min: number; max: number };
    precautions: string[];
  };
  
  // Qualité et contrôle
  controleQualite: {
    testReception: string[];
    frequenceControle: string;
    critereAcceptation: string[];
    defautsFrequents: string[];
  };
  
  // Durabilité et maintenance
  durabilite: {
    dureeVieEstimee: number; // années
    maintenanceRequise: boolean;
    frequenceMaintenance?: string;
    signesdUsure: string[];
    remplacement: string[];
  };
}

// ================== BASE DE DONNÉES MATÉRIAUX ==================

export const MATERIAUX_BTP_DATABASE: MaterielBTP[] = [
  
  // =================== MAÇONNERIE ===================
  {
    id: 'brique-rouge-15x10x5',
    nom: 'Brique Rouge Pleine 15x10x5cm',
    categorie: 'GROS_OEUVRE',
    sousCategorie: 'Maçonnerie - Briques',
    
    dimensions: {
      longueur: 150,
      largeur: 100,
      hauteur: 50,
      tolerance: 2
    },
    
    proprietes: {
      densite: 1800,
      resistanceCompression: 15,
      resistanceTraction: 2.5,
      resistanceFlexion: 4.2,
      moduleElasticite: 12000,
      coefficientDilatation: 0.000006,
      absorptionEau: 12,
      porosite: 18,
      conductiviteThermique: 0.85,
      resistanceGel: true,
      resistanceIntemperies: 'EXCELLENT'
    },
    
    climatique: {
      temperatureMin: -10,
      temperatureMax: 60,
      humiditeMax: 95,
      resistanceUV: 'EXCELLENT',
      resistancePluie: 'EXCELLENT',
      resistanceVentFort: true,
      adaptationSaison: [
        {
          saison: 'PLUIES',
          recommandations: [
            'Protection contre l\'eau pendant stockage',
            'Séchage avant pose si humide',
            'Éviter pose sous pluie battante'
          ]
        },
        {
          saison: 'SECHE',
          recommandations: [
            'Humidification avant pose',
            'Protection solaire du mortier',
            'Arrosage après pose'
          ]
        }
      ]
    },
    
    normes: {
      norme: 'NF EN 771-1',
      classification: 'M10 - FB 15',
      certificationRequise: true,
      organismeControle: ['CSTB', 'CERIB'],
      testsObligatoires: [
        'Résistance compression',
        'Absorption d\'eau',
        'Dimensions et tolérances',
        'Gel/dégel'
      ],
      marquageCE: true,
      conformiteECOWAS: true
    },
    
    quantification: {
      uniteBase: 'pièce',
      facteurPerte: 5,
      facteurSurapprovisionnement: 10,
      modeFourniture: 'PALETTE',
      conditionnement: {
        quantiteParUnite: 500,
        poidsUnitaire: 1.35, // kg par brique
        dimensionsEmballage: {
          longueur: 1200,
          largeur: 800,
          hauteur: 1000,
          tolerance: 0
        }
      },
      calculAutomatique: {
        formule: '(surface_mur * 1000000) / (longueur * hauteur) / epaisseur_mur_en_briques',
        parametres: ['surface_mur_m2', 'epaisseur_mur_cm']
      }
    },
    
    marques: [
      {
        nom: 'Briqueterie du Sahel',
        origine: 'Burkina Faso',
        certifie: true,
        prix: [
          { devise: 'XOF', montant: 45, unite: 'pièce' },
          { devise: 'XOF', montant: 22500, unite: 'palette_500' }
        ]
      },
      {
        nom: 'CIMAF Briques',
        origine: 'Côte d\'Ivoire',
        certifie: true,
        prix: [
          { devise: 'XOF', montant: 50, unite: 'pièce' },
          { devise: 'XOF', montant: 24000, unite: 'palette_500' }
        ]
      }
    ],
    
    fournisseurs: [
      {
        nom: 'Matériaux Modernes Abidjan',
        pays: 'Côte d\'Ivoire',
        ville: 'Abidjan',
        delaiLivraison: 3,
        quantiteMinimale: 1000,
        conditions: ['Paiement comptant -3%', 'Livraison gratuite >5000 pièces']
      }
    ],
    
    miseEnOeuvre: {
      outillageNecessaire: [
        'Truelle',
        'Niveau à bulle',
        'Cordeau',
        'Seau mortier',
        'Taloche',
        'Martelet caoutchouc'
      ],
      competencesRequises: ['Maçon qualifié', 'Lecture de plan'],
      tempsUnitaire: 3, // 3min par brique posée
      conditionsMeteo: ['Pas de pluie', 'Température > 5°C'],
      temperatureOptimale: { min: 15, max: 35 },
      precautions: [
        'Humidifier les briques avant pose',
        'Mortier dosé à 350kg/m³',
        'Joints de 10-12mm',
        'Appareillage en quinconce'
      ]
    },
    
    controleQualite: {
      testReception: [
        'Vérification dimensions',
        'Test sonore (percussion)',
        'Contrôle visuel fissures',
        'Vérification planéité'
      ],
      frequenceControle: '1% des briques par lot',
      critereAcceptation: [
        'Dimensions ±2mm',
        'Pas de fissures > 1mm',
        'Couleur homogène',
        'Son clair à la percussion'
      ],
      defautsFrequents: [
        'Fissures de séchage',
        'Variations dimensionnelles',
        'Éclats d\'angles',
        'Couleur hétérogène'
      ]
    },
    
    durabilite: {
      dureeVieEstimee: 100,
      maintenanceRequise: false,
      signesdUsure: [
        'Efflorescence',
        'Fissuration',
        'Érosion des joints'
      ],
      remplacement: [
        'Reprise de maçonnerie localisée',
        'Rejointoiement si nécessaire'
      ]
    }
  },

  // =================== BÉTON ARMÉ - FER À BÉTON ===================
  {
    id: 'fer-beton-ha-12mm',
    nom: 'Fer à Béton HA 12mm - Haute Adhérence',
    categorie: 'GROS_OEUVRE',
    sousCategorie: 'Béton Armé - Armatures',
    
    dimensions: {
      longueur: 12000, // barre de 12m standard
      largeur: 0,
      hauteur: 0,
      diametre: 12,
      tolerance: 0.5
    },
    
    proprietes: {
      densite: 7850, // kg/m³ acier
      resistanceCompression: 500, // MPa (limite élastique)
      resistanceTraction: 550, // MPa
      resistanceFlexion: 550,
      moduleElasticite: 200000, // GPa
      coefficientDilatation: 0.000012,
      absorptionEau: 0,
      porosite: 0,
      conductiviteThermique: 50,
      resistanceGel: true,
      resistanceIntemperies: 'MOYEN' // nécessite protection
    },
    
    climatique: {
      temperatureMin: -40,
      temperatureMax: 80,
      humiditeMax: 100,
      resistanceUV: 'BON',
      resistancePluie: 'MOYEN', // corrosion possible
      resistanceVentFort: true,
      adaptationSaison: [
        {
          saison: 'PLUIES',
          recommandations: [
            'Stockage sur chevrons, hors sol',
            'Bâchage étanche obligatoire',
            'Contrôle rouille avant mise en œuvre',
            'Nettoyage si corrosion superficielle'
          ]
        },
        {
          saison: 'SECHE',
          recommandations: [
            'Protection UV des barres stockées',
            'Éviter surchauffe >60°C',
            'Humidification du béton de coulage'
          ]
        }
      ]
    },
    
    normes: {
      norme: 'NF A 35-080-1',
      classification: 'FeE500 - HA',
      certificationRequise: true,
      organismeControle: ['AFNOR', 'CSTB'],
      testsObligatoires: [
        'Traction - limite élastique',
        'Traction - résistance rupture',
        'Allongement rupture',
        'Pliage-dépliage',
        'Géométrie des verrous'
      ],
      marquageCE: true,
      conformiteECOWAS: true,
      conformiteSADC: true
    },
    
    quantification: {
      uniteBase: 'kg',
      facteurPerte: 8, // chutes + façonnage
      facteurSurapprovisionnement: 15,
      modeFourniture: 'VRAC',
      conditionnement: {
        quantiteParUnite: 2000, // kg par lot
        poidsUnitaire: 0.888, // kg/ml pour Ø12
        dimensionsEmballage: {
          longueur: 12000,
          largeur: 200,
          hauteur: 200,
          tolerance: 0
        }
      },
      calculAutomatique: {
        formule: 'surface_dalle * epaisseur_dalle * densite_armature_kg_m3',
        parametres: ['surface_m2', 'epaisseur_cm', 'ratio_armature_kg_m3']
      }
    },
    
    marques: [
      {
        nom: 'ACIERIES du Bénin',
        origine: 'Bénin',
        certifie: true,
        prix: [
          { devise: 'XOF', montant: 850, unite: 'kg' },
          { devise: 'XOF', montant: 1700000, unite: 'tonne' }
        ]
      },
      {
        nom: 'SIDEX Mali',
        origine: 'Mali',
        certifie: true,
        prix: [
          { devise: 'XOF', montant: 820, unite: 'kg' },
          { devise: 'XOF', montant: 1640000, unite: 'tonne' }
        ]
      }
    ],
    
    fournisseurs: [
      {
        nom: 'Négoce Sidérurgie Ouest-Afrique',
        pays: 'Sénégal',
        ville: 'Dakar',
        delaiLivraison: 7,
        quantiteMinimale: 500,
        conditions: ['Transport inclus >1T', 'Façonnage sur demande']
      }
    ],
    
    miseEnOeuvre: {
      outillageNecessaire: [
        'Coupe-boulons Ø12',
        'Cintreuse manuelle',
        'Ployeur d\'acier',
        'Ligatures fil de fer',
        'Mètre ruban',
        'Équerre de maçon'
      ],
      competencesRequises: ['Ferrailleur qualifié', 'Lecture plans ferraillage'],
      tempsUnitaire: 120, // 2h par 100kg façonnage + pose
      conditionsMeteo: ['Pas de pluie pendant bétonnage'],
      temperatureOptimale: { min: 5, max: 35 },
      precautions: [
        'Enrobage minimum 2,5cm',
        'Recouvrement 40Ø minimum',
        'Calage armatures avec cales béton',
        'Vérification espacement barres',
        'Nettoyage rouille si nécessaire'
      ]
    },
    
    controleQualite: {
      testReception: [
        'Vérification marquage acier',
        'Contrôle diamètre pied à coulisse',
        'Essai pliage manuel',
        'Contrôle rectitude',
        'État de surface (rouille)'
      ],
      frequenceControle: '10% des barres par livraison',
      critereAcceptation: [
        'Marquage conforme norme',
        'Diamètre ±0,5mm',
        'Pas de rouille adhérente',
        'Rectitude <5mm/m',
        'Nervures conformes'
      ],
      defautsFrequents: [
        'Corrosion superficielle',
        'Défauts de nervurage',
        'Variations de diamètre',
        'Courbure excessive'
      ]
    },
    
    durabilite: {
      dureeVieEstimee: 50,
      maintenanceRequise: false,
      signesdUsure: [
        'Corrosion si enrobage insuffisant',
        'Fissuration béton par gonflement rouille'
      ],
      remplacement: [
        'Reprise béton si corrosion avancée',
        'Renforcement structure si nécessaire'
      ]
    }
  },

  // =================== BÉTON - CIMENT ===================
  {
    id: 'ciment-portland-cem1-525',
    nom: 'Ciment Portland CEM I 52.5 N',
    categorie: 'GROS_OEUVRE',
    sousCategorie: 'Béton - Liants',
    
    dimensions: {
      longueur: 0,
      largeur: 0,
      hauteur: 0,
      tolerance: 0
    },
    
    proprietes: {
      densite: 3150, // kg/m³ ciment pur
      resistanceCompression: 52.5, // MPa à 28j
      resistanceTraction: 0,
      resistanceFlexion: 0,
      moduleElasticite: 0,
      coefficientDilatation: 0.00001,
      absorptionEau: 0,
      porosite: 0,
      conductiviteThermique: 1.4,
      resistanceGel: true,
      resistanceIntemperies: 'EXCELLENT'
    },
    
    climatique: {
      temperatureMin: 5,
      temperatureMax: 50,
      humiditeMax: 85,
      resistanceUV: 'EXCELLENT',
      resistancePluie: 'EXCELLENT',
      resistanceVentFort: true,
      adaptationSaison: [
        {
          saison: 'PLUIES',
          recommandations: [
            'Stockage impérativement au sec',
            'Palettes surélevées obligatoires',
            'Bâchage étanche renforcé',
            'Rotation stock (premier entré = premier sorti)',
            'Contrôle prise avant usage si humidité'
          ]
        },
        {
          saison: 'SECHE',
          recommandations: [
            'Protection chaleur excessive >40°C',
            'Humidification granulats et eau',
            'Coulage tôt le matin ou tard le soir',
            'Cure humide prolongée 7 jours minimum'
          ]
        }
      ]
    },
    
    normes: {
      norme: 'NF EN 197-1',
      classification: 'CEM I 52.5 N',
      certificationRequise: true,
      organismeControle: ['AFNOR', 'CERIB'],
      testsObligatoires: [
        'Résistance compression 2j, 7j, 28j',
        'Temps de prise début/fin',
        'Expansion Le Chatelier',
        'Finesse Blaine',
        'Composition chimique'
      ],
      marquageCE: true,
      conformiteECOWAS: true
    },
    
    quantification: {
      uniteBase: 'kg',
      facteurPerte: 3,
      facteurSurapprovisionnement: 10,
      modeFourniture: 'SACS',
      conditionnement: {
        quantiteParUnite: 50, // sac de 50kg
        poidsUnitaire: 50,
        dimensionsEmballage: {
          longueur: 600,
          largeur: 400,
          hauteur: 120,
          tolerance: 0
        }
      },
      calculAutomatique: {
        formule: 'volume_beton_m3 * dosage_ciment_kg_m3',
        parametres: ['volume_beton_m3', 'classe_resistance', 'type_ouvrage']
      }
    },
    
    marques: [
      {
        nom: 'CIMTOGO',
        origine: 'Togo',
        certifie: true,
        prix: [
          { devise: 'XOF', montant: 4200, unite: 'sac_50kg' },
          { devise: 'XOF', montant: 84, unite: 'kg' }
        ]
      },
      {
        nom: 'CIMENTS du Sahel',
        origine: 'Burkina Faso',
        certifie: true,
        prix: [
          { devise: 'XOF', montant: 4000, unite: 'sac_50kg' },
          { devise: 'XOF', montant: 80, unite: 'kg' }
        ]
      }
    ],
    
    fournisseurs: [
      {
        nom: 'Distribution BTP Sahel',
        pays: 'Mali',
        ville: 'Bamako',
        delaiLivraison: 2,
        quantiteMinimale: 1000,
        conditions: ['Livraison camion souffleur', 'Stockage silo si >5T']
      }
    ],
    
    miseEnOeuvre: {
      outillageNecessaire: [
        'Bétonnière ou centrale béton',
        'Pelle, seau doseur',
        'Vibreur béton',
        'Taloche, règle',
        'Pulvérisateur cure',
        'Bâches protection'
      ],
      competencesRequises: ['Maçon béton armé', 'Dosage béton'],
      tempsUnitaire: 30, // 30min par m³ fabrication + coulage
      conditionsMeteo: ['Température 5-35°C', 'Pas de gel', 'Pas pluie battante'],
      temperatureOptimale: { min: 15, max: 25 },
      precautions: [
        'Dosage précis selon classe résistance',
        'Malaxage minimum 2 minutes',
        'Coulage dans les 1h30',
        'Vibration complète sans ségrégation',
        'Cure humide 7j minimum climat tropical'
      ]
    },
    
    controleQualite: {
      testReception: [
        'Vérification date fabrication <3 mois',
        'Contrôle emballage (pas de trous)',
        'Test prise main (pas de grumeaux durs)',
        'Couleur gris homogène',
        'Marquage conforme sac'
      ],
      frequenceControle: '1 sac par palette',
      critereAcceptation: [
        'Date <90j',
        'Pas de prise en sac',
        'Pas de contamination',
        'Marquage CE visible',
        'Finesse tactile correcte'
      ],
      defautsFrequents: [
        'Prise prématurée (humidité)',
        'Grumeaux durs',
        'Contamination plâtre',
        'Sacs percés'
      ]
    },
    
    durabilite: {
      dureeVieEstimee: 100,
      maintenanceRequise: false,
      signesdUsure: [
        'Carbonatation surface',
        'Microfissuration retrait',
        'Décoloration'
      ],
      remplacement: [
        'Réparation béton si dégradation',
        'Protection surface si nécessaire'
      ]
    }
  }

  // [La base sera étendue avec TOUS les matériaux : sables, graviers, carrelages, 
  //  peintures, isolants, menuiseries, plomberie, électricité, etc.]
];

// ================== CALCULS AUTOMATIQUES AVANCÉS ==================

export class CalculateurBTPAfrique {
  
  /**
   * Calcul ultra-précis quantité briques pour mur
   */
  static calculerBriquesMur(params: {
    longueur: number; // m
    hauteur: number; // m
    epaisseur: number; // cm (10, 15, 20)
    ouvertures?: { largeur: number; hauteur: number }[]; // portes/fenêtres
    typeAppareillage: 'DROIT' | 'QUINCONCE' | 'FLAMAND';
    jointHorizontal: number; // mm (généralement 10-12)
    jointVertical: number; // mm (généralement 10-12)
  }) {
    
    const { longueur, hauteur, epaisseur, ouvertures = [], 
            typeAppareillage, jointHorizontal, jointVertical } = params;
    
    // Dimensions brique standard (peut être paramétrable)
    const brique = MATERIAUX_BTP_DATABASE.find(m => m.id === 'brique-rouge-15x10x5')!;
    const largeurBrique = brique.dimensions.longueur; // 150mm
    const hauteurBrique = brique.dimensions.hauteur; // 50mm
    
    // Surface nette mur
    let surfaceMur = longueur * hauteur;
    
    // Déduction ouvertures
    for (const ouverture of ouvertures) {
      surfaceMur -= ouverture.largeur * ouverture.hauteur;
    }
    
    // Nombre de briques par m²
    const largeurAvecJoint = largeurBrique + jointVertical;
    const hauteurAvecJoint = hauteurBrique + jointHorizontal;
    
    const briquesParM2 = (1000 / largeurAvecJoint) * (1000 / hauteurAvecJoint);
    
    // Nombre briques selon appareillage
    let coefficientAppareillage = 1;
    switch (typeAppareillage) {
      case 'QUINCONCE':
        coefficientAppareillage = 1.02; // légère surconsommation
        break;
      case 'FLAMAND':
        coefficientAppareillage = 1.15; // appareillage décoratif
        break;
    }
    
    // Épaisseur mur (nombre de briques en épaisseur)
    const nombreCouchesEpaisseur = Math.ceil(epaisseur * 10 / brique.dimensions.largeur);
    
    const nombreBriques = Math.ceil(
      surfaceMur * briquesParM2 * coefficientAppareillage * nombreCouchesEpaisseur
    );
    
    // Calcul mortier
    const volumeMortier = this.calculerMortierMaconnerie({
      nombreBriques,
      jointHorizontal,
      jointVertical,
      surfaceMur,
      epaisseurMur: epaisseur
    });
    
    return {
      nombreBriques,
      briquesParM2: Math.round(briquesParM2),
      surfaceNette: surfaceMur,
      coefficientAppareillage,
      mortier: volumeMortier,
      details: {
        largeurAvecJoint,
        hauteurAvecJoint,
        nombreCouchesEpaisseur
      }
    };
  }

  /**
   * Calcul volume mortier pour maçonnerie
   */
  static calculerMortierMaconnerie(params: {
    nombreBriques: number;
    jointHorizontal: number; // mm
    jointVertical: number; // mm
    surfaceMur: number; // m²
    epaisseurMur: number; // cm
  }) {
    
    const { nombreBriques, jointHorizontal, jointVertical, surfaceMur, epaisseurMur } = params;
    
    // Volume joints approximatif = 15% du volume briques
    const volumeBriques = nombreBriques * 0.15 * 0.10 * 0.05; // m³
    const volumeMortier = volumeBriques * 0.25; // 25% du volume briques
    
    // Dosage mortier standard maçonnerie : 350kg ciment/m³
    const cimentKg = volumeMortier * 350;
    const sableM3 = volumeMortier * 0.8; // 800L sable par m³ mortier
    const eauLitres = volumeMortier * 175; // 175L eau par m³
    
    return {
      volumeTotal: volumeMortier,
      dosage: {
        ciment: Math.ceil(cimentKg),
        sable: Math.ceil(sableM3 * 1000), // en litres
        eau: Math.ceil(eauLitres)
      },
      nombreSacsCiment50kg: Math.ceil(cimentKg / 50)
    };
  }

  /**
   * Calcul béton armé dalle - ULTRA DÉTAILLÉ
   */
  static calculerBetonArme(params: {
    longueur: number; // m
    largeur: number; // m  
    epaisseur: number; // cm
    typeOuvrage: 'DALLE' | 'POUTRE' | 'POTEAU' | 'VOILE';
    classeBeton: 'C20/25' | 'C25/30' | 'C30/37' | 'C35/45';
    classeExposition: 'XC1' | 'XC3' | 'XC4' | 'XS1' | 'XS3'; // selon EN 206
    acierType: 'FeE400' | 'FeE500';
    enrobageRequis?: number; // cm
  }) {
    
    const { longueur, largeur, epaisseur, typeOuvrage, classeBeton, 
            classeExposition, acierType, enrobageRequis } = params;
    
    // Volume béton
    const volumeBeton = longueur * largeur * (epaisseur / 100);
    
    // Dosage béton selon classe
    const dosagesBeton = {
      'C20/25': { ciment: 300, eau: 165, graviers: 1100, sable: 650 },
      'C25/30': { ciment: 350, eau: 175, graviers: 1050, sable: 600 },
      'C30/37': { ciment: 385, eau: 180, graviers: 1000, sable: 580 },
      'C35/45': { ciment: 420, eau: 185, graviers: 950, sable: 550 }
    };
    
    const dosage = dosagesBeton[classeBeton];
    
    // Enrobage selon classe exposition (climat tropical africain)
    const enrobages = {
      'XC1': 2.0, // intérieur sec
      'XC3': 2.5, // intérieur humide 
      'XC4': 3.0, // extérieur avec gel
      'XS1': 3.5, // air marin
      'XS3': 4.5  // marnage
    };
    
    const enrobage = enrobageRequis || enrobages[classeExposition];
    
    // Calcul armatures selon type ouvrage
    let ratioArmature = 80; // kg/m³ par défaut
    
    switch (typeOuvrage) {
      case 'DALLE':
        ratioArmature = epaisseur < 15 ? 60 : 80;
        break;
      case 'POUTRE':
        ratioArmature = 120;
        break;
      case 'POTEAU':
        ratioArmature = 150;
        break;
      case 'VOILE':
        ratioArmature = 100;
        break;
    }
    
    const poidsAcierTotal = volumeBeton * ratioArmature;
    
    // Répartition par diamètres (approximation standard)
    const repartitionAcier = {
      6: poidsAcierTotal * 0.1,   // 10% en Ø6
      8: poidsAcierTotal * 0.15,  // 15% en Ø8
      10: poidsAcierTotal * 0.25, // 25% en Ø10
      12: poidsAcierTotal * 0.30, // 30% en Ø12
      14: poidsAcierTotal * 0.15, // 15% en Ø14
      16: poidsAcierTotal * 0.05  // 5% en Ø16
    };
    
    return {
      volumeBeton,
      materiaux: {
        ciment: {
          quantite: Math.ceil(volumeBeton * dosage.ciment),
          sacs50kg: Math.ceil(volumeBeton * dosage.ciment / 50)
        },
        sable: {
          quantite: Math.ceil(volumeBeton * dosage.sable), // kg
          volumeM3: Math.ceil(volumeBeton * dosage.sable / 1600) // densité sable
        },
        graviers: {
          quantite: Math.ceil(volumeBeton * dosage.graviers), // kg
          volumeM3: Math.ceil(volumeBeton * dosage.graviers / 1500) // densité graviers
        },
        eau: Math.ceil(volumeBeton * dosage.eau), // litres
        acier: {
          total: Math.ceil(poidsAcierTotal),
          repartition: repartitionAcier
        }
      },
      specifications: {
        classeBeton,
        classeExposition,
        enrobage,
        ratioArmature
      },
      controles: {
        slumpTest: '8-12cm',
        resistanceRequise: classeBeton,
        ageDecoffrage: epaisseur < 20 ? '7j' : '14j'
      }
    };
  }
}

// [SUITE AVEC TOUS LES AUTRES MATÉRIAUX ET CALCULS...]