/**
 * Types et templates pour la gestion automatique des phases de chantier BTP
 * Système de pré-configuration des phases selon le type de chantier
 */

// Types de chantiers BTP avec classification métier complète
export type TypeChantier = 
    // Bâtiment résidentiel
    | 'MAISON_INDIVIDUELLE'
    | 'IMMEUBLE_COLLECTIF'
    | 'RENOVATION_RESIDENTIELLE'
    | 'EXTENSION_RESIDENTIELLE'
    
    // Bâtiment tertiaire
    | 'BUREAU_COMMERCIAL'
    | 'CENTRE_COMMERCIAL'
    | 'ETABLISSEMENT_SCOLAIRE'
    | 'ETABLISSEMENT_SANTE'
    | 'ETABLISSEMENT_SPORTIF'
    | 'ENTREPOT_LOGISTIQUE'
    
    // Infrastructure
    | 'VOIRIE_URBAINE'
    | 'AUTOROUTE'
    | 'PONT_VIADUC'
    | 'TUNNEL'
    | 'PARKING'
    | 'AIRE_AMENAGEE'
    
    // Industriel
    | 'USINE_INDUSTRIELLE'
    | 'CENTRALE_ENERGIE'
    | 'STATION_EPURATION'
    | 'INSTALLATION_CHIMIQUE'
    
    // Spécialisé
    | 'PISCINE'
    | 'COURT_TENNIS'
    | 'TERRAIN_SPORT'
    | 'MONUMENT_HISTORIQUE'
    | 'OUVRAGE_ART';

// Interface pour une phase template
export interface PhaseTemplate {
    id: string;
    nom: string;
    description: string;
    ordreExecution: number;
    dureePrevueJours: number;
    critique: boolean;
    prerequis?: string[];
    sousPhases?: SousPhaseTemplate[];
    materielsTypes?: string[];
    competencesRequises?: string[];
    controleQualite?: string[];
}

// Interface pour une sous-phase template
export interface SousPhaseTemplate {
    id: string;
    nom: string;
    description: string;
    ordreExecution: number;
    dureePrevueJours: number;
    materielsTypes?: string[];
    competencesRequises?: string[];
}

// Interface pour un template de chantier complet
export interface ChantierTemplate {
    typeChantier: TypeChantier;
    nom: string;
    description: string;
    dureeMoyenneJours: number;
    phases: PhaseTemplate[];
    specificites?: string[];
    reglementations?: string[];
}

// Libellés pour les types de chantiers
export const TYPE_CHANTIER_LABELS: Record<TypeChantier, string> = {
    // Résidentiel
    MAISON_INDIVIDUELLE: 'Maison individuelle',
    IMMEUBLE_COLLECTIF: 'Immeuble collectif',
    RENOVATION_RESIDENTIELLE: 'Rénovation résidentielle',
    EXTENSION_RESIDENTIELLE: 'Extension résidentielle',
    
    // Tertiaire
    BUREAU_COMMERCIAL: 'Bureau / Commerce',
    CENTRE_COMMERCIAL: 'Centre commercial',
    ETABLISSEMENT_SCOLAIRE: 'Établissement scolaire',
    ETABLISSEMENT_SANTE: 'Établissement de santé',
    ETABLISSEMENT_SPORTIF: 'Établissement sportif',
    ENTREPOT_LOGISTIQUE: 'Entrepôt / Logistique',
    
    // Infrastructure
    VOIRIE_URBAINE: 'Voirie urbaine',
    AUTOROUTE: 'Autoroute',
    PONT_VIADUC: 'Pont / Viaduc',
    TUNNEL: 'Tunnel',
    PARKING: 'Parking',
    AIRE_AMENAGEE: 'Aire aménagée',
    
    // Industriel
    USINE_INDUSTRIELLE: 'Usine industrielle',
    CENTRALE_ENERGIE: 'Centrale énergétique',
    STATION_EPURATION: 'Station d\'épuration',
    INSTALLATION_CHIMIQUE: 'Installation chimique',
    
    // Spécialisé
    PISCINE: 'Piscine',
    COURT_TENNIS: 'Court de tennis',
    TERRAIN_SPORT: 'Terrain de sport',
    MONUMENT_HISTORIQUE: 'Monument historique',
    OUVRAGE_ART: 'Ouvrage d\'art'
};

// Catégories de chantiers pour l'organisation
export const CATEGORIES_CHANTIER = {
    RESIDENTIEL: {
        label: 'Résidentiel',
        types: ['MAISON_INDIVIDUELLE', 'IMMEUBLE_COLLECTIF', 'RENOVATION_RESIDENTIELLE', 'EXTENSION_RESIDENTIELLE'] as TypeChantier[]
    },
    TERTIAIRE: {
        label: 'Tertiaire',
        types: ['BUREAU_COMMERCIAL', 'CENTRE_COMMERCIAL', 'ETABLISSEMENT_SCOLAIRE', 'ETABLISSEMENT_SANTE', 'ETABLISSEMENT_SPORTIF', 'ENTREPOT_LOGISTIQUE'] as TypeChantier[]
    },
    INFRASTRUCTURE: {
        label: 'Infrastructure',
        types: ['VOIRIE_URBAINE', 'AUTOROUTE', 'PONT_VIADUC', 'TUNNEL', 'PARKING', 'AIRE_AMENAGEE'] as TypeChantier[]
    },
    INDUSTRIEL: {
        label: 'Industriel',
        types: ['USINE_INDUSTRIELLE', 'CENTRALE_ENERGIE', 'STATION_EPURATION', 'INSTALLATION_CHIMIQUE'] as TypeChantier[]
    },
    SPECIALISE: {
        label: 'Spécialisé',
        types: ['PISCINE', 'COURT_TENNIS', 'TERRAIN_SPORT', 'MONUMENT_HISTORIQUE', 'OUVRAGE_ART'] as TypeChantier[]
    }
} as const;

// Templates de phases communes à tous les types de chantiers
export const PHASES_COMMUNES: PhaseTemplate[] = [
    {
        id: 'etudes-preliminaires',
        nom: 'Études préliminaires et définition du projet',
        description: 'Analyse de faisabilité, études de sol, définition du programme',
        ordreExecution: 1,
        dureePrevueJours: 30,
        critique: true,
        sousPhases: [
            {
                id: 'analyse-faisabilite',
                nom: 'Analyse de faisabilité',
                description: 'Étude technique, économique et réglementaire',
                ordreExecution: 1,
                dureePrevueJours: 10,
                competencesRequises: ['Bureau d\'études', 'Économiste']
            },
            {
                id: 'releves-topographiques',
                nom: 'Relevés topographiques',
                description: 'Levés de terrain et cartographie',
                ordreExecution: 2,
                dureePrevueJours: 5,
                materielsTypes: ['Matériel topographique'],
                competencesRequises: ['Géomètre']
            },
            {
                id: 'etudes-geotechniques',
                nom: 'Études géotechniques',
                description: 'Étude de sol et recommandations fondations',
                ordreExecution: 3,
                dureePrevueJours: 10,
                materielsTypes: ['Foreuse', 'Équipement laboratoire'],
                competencesRequises: ['Géotechnicien']
            },
            {
                id: 'analyse-environnementale',
                nom: 'Analyse environnementale',
                description: 'Impact environnemental et contraintes réglementaires',
                ordreExecution: 4,
                dureePrevueJours: 5,
                competencesRequises: ['Expert environnemental']
            }
        ],
        competencesRequises: ['Maître d\'œuvre', 'Bureau d\'études'],
        controleQualite: ['Validation études géotechniques', 'Conformité réglementaire']
    },
    {
        id: 'conception-projet',
        nom: 'Conception du projet',
        description: 'Avant-projets, plans détaillés, demandes d\'autorisation',
        ordreExecution: 2,
        dureePrevueJours: 45,
        critique: true,
        prerequis: ['etudes-preliminaires'],
        sousPhases: [
            {
                id: 'avant-projet-sommaire',
                nom: 'Avant-projet sommaire (APS)',
                description: 'Définition générale du projet',
                ordreExecution: 1,
                dureePrevueJours: 15,
                competencesRequises: ['Architecte', 'Bureau d\'études']
            },
            {
                id: 'avant-projet-definitif',
                nom: 'Avant-projet définitif (APD)',
                description: 'Finalisation conception et dimensionnement',
                ordreExecution: 2,
                dureePrevueJours: 20,
                competencesRequises: ['Architecte', 'Bureau d\'études', 'Économiste']
            },
            {
                id: 'plans-detailles',
                nom: 'Plans détaillés d\'exécution',
                description: 'Plans techniques et spécifications',
                ordreExecution: 3,
                dureePrevueJours: 10,
                competencesRequises: ['Dessinateur', 'Bureau d\'études']
            }
        ],
        competencesRequises: ['Architecte', 'Bureau d\'études'],
        controleQualite: ['Validation architecturale', 'Conformité technique']
    },
    {
        id: 'preparation-chantier',
        nom: 'Préparation du chantier',
        description: 'Organisation du site, approvisionnements, coordination',
        ordreExecution: 3,
        dureePrevueJours: 20,
        critique: true,
        prerequis: ['conception-projet'],
        sousPhases: [
            {
                id: 'organisation-site',
                nom: 'Organisation du site',
                description: 'Plan d\'installation de chantier (PIC)',
                ordreExecution: 1,
                dureePrevueJours: 5,
                competencesRequises: ['Conducteur de travaux']
            },
            {
                id: 'implantation-terrain',
                nom: 'Implantation sur le terrain',
                description: 'Piquetage et marquage',
                ordreExecution: 2,
                dureePrevueJours: 3,
                materielsTypes: ['Matériel topographique'],
                competencesRequises: ['Géomètre', 'Chef d\'équipe']
            },
            {
                id: 'installation-bases-vie',
                nom: 'Installation des bases vie',
                description: 'Espaces de travail, sanitaires, stockage',
                ordreExecution: 3,
                dureePrevueJours: 5,
                materielsTypes: ['Bungalows', 'Clôtures', 'Raccordements'],
                competencesRequises: ['Équipe installation']
            },
            {
                id: 'approvisionnement-logistique',
                nom: 'Approvisionnement et logistique',
                description: 'Commandes matériaux et planification livraisons',
                ordreExecution: 4,
                dureePrevueJours: 7,
                competencesRequises: ['Responsable logistique']
            }
        ],
        competencesRequises: ['Conducteur de travaux', 'Chef de chantier'],
        controleQualite: ['Plan de sécurité validé', 'Autorisations administratives']
    }
];

// Export des constantes utiles
export const DUREE_MOYENNE_PAR_TYPE: Record<TypeChantier, number> = {
    MAISON_INDIVIDUELLE: 270,
    IMMEUBLE_COLLECTIF: 540,
    RENOVATION_RESIDENTIELLE: 180,
    EXTENSION_RESIDENTIELLE: 120,
    BUREAU_COMMERCIAL: 360,
    CENTRE_COMMERCIAL: 720,
    ETABLISSEMENT_SCOLAIRE: 600,
    ETABLISSEMENT_SANTE: 900,
    ETABLISSEMENT_SPORTIF: 480,
    ENTREPOT_LOGISTIQUE: 240,
    VOIRIE_URBAINE: 150,
    AUTOROUTE: 1080,
    PONT_VIADUC: 900,
    TUNNEL: 1440,
    PARKING: 120,
    AIRE_AMENAGEE: 90,
    USINE_INDUSTRIELLE: 720,
    CENTRALE_ENERGIE: 1800,
    STATION_EPURATION: 540,
    INSTALLATION_CHIMIQUE: 960,
    PISCINE: 90,
    COURT_TENNIS: 45,
    TERRAIN_SPORT: 60,
    MONUMENT_HISTORIQUE: 720,
    OUVRAGE_ART: 540
};