/**
 * Types pour les formulaires de chantier avec gestion avancée des types et phases
 */

import { TypeChantier } from './chantier-templates';

// Interface pour le formulaire de création/modification de chantier
export interface ChantierFormData {
    nom: string;
    description?: string;
    adresse: string;
    codePostal?: string;
    ville?: string;
    dateDebut: string;
    dateFinPrevue?: string;
    montantPrevu?: number;
    clientId: string;
    
    // Nouveaux champs avancés
    typeChantier: TypeChantier;
    surface?: number;
    nombreNiveaux?: number;
    autoGenererPhases: boolean;
    inclureSousPhases: boolean;
    ajusterDelais: boolean;
    
    // Spécificités et contraintes
    specificites?: string[];
    contraintes?: string;
    accesPMR?: boolean;
    performanceEnergetique?: string;
    
    // Informations techniques
    natureTerrain?: string;
    presenceReseaux?: boolean;
    accessibiliteChantier?: 'FACILE' | 'MOYENNE' | 'DIFFICILE';
    stockagePossible?: boolean;
    
    // Réglementation
    permisRequis?: boolean;
    numeroPermis?: string;
    dateObtentionPermis?: string;
    controleUrbanismeRequis?: boolean;
    
    // Options de planification
    margeSecurite?: number; // en jours
    periodesTravailRestreintes?: Array<{
        dateDebut: string;
        dateFin: string;
        motif: string;
    }>;
    
    // Équipes et ressources préférées
    equipePrefereId?: string;
    materielsRequis?: string[];

    // Statut et activation
    statut?: string;
    actif?: boolean;
}

// Interface pour la prévisualisation du projet
export interface ChantierPreview {
    typeChantier: TypeChantier;
    nom: string;
    dureeEstimee: number;
    dateFinEstimee: Date;
    complexite: {
        niveau: 'SIMPLE' | 'MOYEN' | 'COMPLEXE' | 'TRES_COMPLEXE';
        score: number;
        facteurs: string[];
    };
    phasesCount: number;
    sousePhasesCount: number;
    specificites: string[];
    reglementations: string[];
    coutEstime?: number;
}

// Interface pour les options de génération de phases
export interface PhaseGenerationOptions {
    inclureSousPhases: boolean;
    ajusterDelais: boolean;
    margeSecurite: number;
    personnaliserDurees: boolean;
    conserverOrdreStandard: boolean;
    genererMateriels: boolean;
    genererFournisseurs: boolean;
    calculerAnalysePrix: boolean;
}

// Interface pour les contraintes temporelles
export interface ContrainteTemporelle {
    id?: string;
    nom: string;
    dateDebut: string;
    dateFin: string;
    type: 'INTEMPERIE' | 'CONGE' | 'AUTRE_CHANTIER' | 'MAINTENANCE' | 'REGLEMENTATION';
    description?: string;
    impactPhases?: string[]; // IDs des phases impactées
}

// Interface pour la validation du formulaire
export interface ChantierFormValidation {
    isValid: boolean;
    errors: {
        [key in keyof ChantierFormData]?: string;
    };
    warnings: string[];
    recommendations: string[];
}

// Interface pour les données calculées
export interface ChantierCalculatedData {
    dureeEstimee: number;
    dateFinCalculee: Date;
    coutEstimeTotal?: number;
    coutEstimeParPhase?: { [phaseId: string]: number };
    ressourcesRequises: {
        equipes: number;
        materiels: string[];
        competences: string[];
    };
    jalonsImportants: Array<{
        nom: string;
        date: Date;
        critique: boolean;
    }>;
}

// Types pour les options de projet
export type AccessibiliteChantier = 'FACILE' | 'MOYENNE' | 'DIFFICILE';
export type NatureTerrain = 'PLAT' | 'PENTE_LEGERE' | 'PENTE_FORTE' | 'ROCHEUX' | 'HUMIDE' | 'INSTABLE';
export type PerformanceEnergetique = 'RT2012' | 'RT2020' | 'RE2020' | 'PASSIF' | 'POSITIF' | 'STANDARD';

// Constantes pour les options
export const ACCESSIBILITE_OPTIONS = [
    { value: 'FACILE', label: 'Facile - Accès direct, terrain plat' },
    { value: 'MOYENNE', label: 'Moyenne - Quelques contraintes d\'accès' },
    { value: 'DIFFICILE', label: 'Difficile - Accès restreint, terrain complexe' }
] as const;

export const NATURE_TERRAIN_OPTIONS = [
    { value: 'PLAT', label: 'Terrain plat' },
    { value: 'PENTE_LEGERE', label: 'Pente légère' },
    { value: 'PENTE_FORTE', label: 'Pente forte' },
    { value: 'ROCHEUX', label: 'Terrain rocheux' },
    { value: 'HUMIDE', label: 'Terrain humide' },
    { value: 'INSTABLE', label: 'Terrain instable' }
] as const;

export const PERFORMANCE_ENERGETIQUE_OPTIONS = [
    { value: 'STANDARD', label: 'Standard (réglementation minimale)' },
    { value: 'RT2012', label: 'RT 2012' },
    { value: 'RT2020', label: 'RT 2020' },
    { value: 'RE2020', label: 'RE 2020 (obligatoire neuf)' },
    { value: 'PASSIF', label: 'Bâtiment passif' },
    { value: 'POSITIF', label: 'Bâtiment à énergie positive' }
] as const;