/**
 * Service pour la gestion des types de chantiers et templates de phases
 * Interface avec l'API backend pour les templates métier BTP
 */

import { TypeChantierTemplate } from '../components/phases/PhaseGenerationWizard';

const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8080/api/v1';

class TypeChantierService {
    
    /**
     * Récupérer tous les templates de types de chantiers disponibles
     */
    async getAllTemplates(): Promise<TypeChantierTemplate[]> {
        try {
            // Essayer d'abord l'API backend
            const response = await fetch(`${API_BASE_URL}/type-chantiers/templates`);
            if (!response.ok) {
                throw new Error(`Erreur HTTP: ${response.status}`);
            }
            return await response.json();
        } catch (error) {
            console.warn('Endpoint backend non disponible, utilisation des données mockées:', error);
            // Fallback sur les données mockées
            return this.getMockTemplates();
        }
    }

    /**
     * Récupérer un template spécifique par son ID
     */
    async getTemplateById(id: string): Promise<TypeChantierTemplate | null> {
        try {
            const templates = await this.getAllTemplates();
            return templates.find(t => t.id === id) || null;
        } catch (error) {
            console.error('Erreur lors du chargement du template:', error);
            return null;
        }
    }

    /**
     * Récupérer les templates par catégorie
     */
    async getTemplatesByCategorie(categorie: string): Promise<TypeChantierTemplate[]> {
        try {
            const templates = await this.getAllTemplates();
            return templates.filter(t => t.categorie === categorie);
        } catch (error) {
            console.error('Erreur lors du filtrage par catégorie:', error);
            return [];
        }
    }

    /**
     * Compte le nombre total de phases (principales + sous-phases) dans un template
     */
    private countTotalPhases(phases: any[]): number {
        return phases.reduce((total, phase) => {
            return total + 1 + (phase.sousPhases ? phase.sousPhases.length : 0);
        }, 0);
    }

    /**
     * Données mockées pour les templates de chantiers BTP
     * REMARQUE : Les durées et budgets sont à null - ils doivent être saisis par l'utilisateur
     */
    private getMockTemplates(): TypeChantierTemplate[] {
        // Définir les phases de Villa Moderne (structure complète réaliste)
        const villaModernePhases = [
            {
                id: 'vm-01',
                nom: 'Préparation et Terrassement',
                description: 'Préparation du terrain et travaux de terrassement',
                ordre: 1,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Terrassement', 'VRD', 'Géomètre'],
                prerequis: [],
                categorieMetier: 'GROS_OEUVRE' as const,
                obligatoire: true,
                personnalisable: false,
                sousPhases: [
                    {
                        id: 'vm-01-01',
                        nom: 'Implantation et piquetage',
                        description: 'Implantation précise de la construction',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Géomètre'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-01-02',
                        nom: 'Décapage et excavation',
                        description: 'Décapage terre végétale et excavation',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Terrassement'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-01-03',
                        nom: 'Évacuation terres et remblaiement',
                        description: 'Évacuation des terres excédentaires et remblaiement',
                        ordre: 3,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Transport', 'Terrassement'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-02',
                nom: 'Fondations',
                description: 'Réalisation des fondations béton armé',
                ordre: 2,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Béton armé', 'Coffreur', 'Ferrailleur'],
                prerequis: ['vm-01'],
                categorieMetier: 'GROS_OEUVRE' as const,
                obligatoire: true,
                personnalisable: false,
                sousPhases: [
                    {
                        id: 'vm-02-01',
                        nom: 'Ferraillage semelles',
                        description: 'Ferraillage des semelles de fondation',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Ferrailleur'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-02-02',
                        nom: 'Coulage semelles',
                        description: 'Coulage béton des semelles',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Béton'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-02-03',
                        nom: 'Vide sanitaire',
                        description: 'Réalisation du vide sanitaire',
                        ordre: 3,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Maçonnerie'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-02-04',
                        nom: 'Étanchéité fondations',
                        description: 'Application de l\'étanchéité des fondations',
                        ordre: 4,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Étancheur'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-03',
                nom: 'Élévation des murs',
                description: 'Construction des murs porteurs et cloisons',
                ordre: 3,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Maçonnerie', 'Béton armé'],
                prerequis: ['vm-02'],
                categorieMetier: 'GROS_OEUVRE' as const,
                obligatoire: true,
                personnalisable: true,
                sousPhases: [
                    {
                        id: 'vm-03-01',
                        nom: 'Murs porteurs RDC',
                        description: 'Élévation murs porteurs rez-de-chaussée',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Maçonnerie'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-03-02',
                        nom: 'Plancher intermédiaire',
                        description: 'Réalisation plancher entre RDC et étage',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Béton armé'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-03-03',
                        nom: 'Murs porteurs étage',
                        description: 'Élévation murs porteurs étage',
                        ordre: 3,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Maçonnerie'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-04',
                nom: 'Charpente et Couverture',
                description: 'Pose de la charpente et réalisation de la couverture',
                ordre: 4,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Charpentier', 'Couvreur'],
                prerequis: ['vm-03'],
                categorieMetier: 'GROS_OEUVRE' as const,
                obligatoire: true,
                personnalisable: false,
                sousPhases: [
                    {
                        id: 'vm-04-01',
                        nom: 'Pose charpente',
                        description: 'Montage de la charpente',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Charpentier'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-04-02',
                        nom: 'Pose couverture',
                        description: 'Pose des tuiles et finitions de toiture',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Couvreur'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-05',
                nom: 'Menuiseries Extérieures',
                description: 'Pose des fenêtres, portes et volets',
                ordre: 5,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Menuisier'],
                prerequis: ['vm-03'],
                categorieMetier: 'SECOND_OEUVRE' as const,
                obligatoire: true,
                personnalisable: true,
                sousPhases: [
                    {
                        id: 'vm-05-01',
                        nom: 'Pose fenêtres',
                        description: 'Installation des fenêtres',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Menuisier'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-05-02',
                        nom: 'Pose porte d\'entrée',
                        description: 'Installation de la porte d\'entrée',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Menuisier'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-06',
                nom: 'Isolation et Cloisons',
                description: 'Isolation thermique et montage des cloisons',
                ordre: 6,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Plaquiste', 'Isolateur'],
                prerequis: ['vm-05'],
                categorieMetier: 'SECOND_OEUVRE' as const,
                obligatoire: true,
                personnalisable: true,
                sousPhases: [
                    {
                        id: 'vm-06-01',
                        nom: 'Isolation thermique',
                        description: 'Pose de l\'isolation thermique',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Isolateur'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-06-02',
                        nom: 'Cloisons placo',
                        description: 'Montage des cloisons en placo',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Plaquiste'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-07',
                nom: 'Électricité',
                description: 'Installation électrique complète',
                ordre: 7,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Électricien'],
                prerequis: ['vm-06'],
                categorieMetier: 'EQUIPEMENTS' as const,
                obligatoire: true,
                personnalisable: false,
                sousPhases: [
                    {
                        id: 'vm-07-01',
                        nom: 'Saignées et gaines',
                        description: 'Réalisation des saignées et pose des gaines',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Électricien'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-07-02',
                        nom: 'Câblage et tableau',
                        description: 'Câblage et installation du tableau électrique',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Électricien'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-08',
                nom: 'Plomberie et Sanitaires',
                description: 'Installation plomberie et équipements sanitaires',
                ordre: 8,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Plombier'],
                prerequis: ['vm-06'],
                categorieMetier: 'EQUIPEMENTS' as const,
                obligatoire: true,
                personnalisable: false,
                sousPhases: [
                    {
                        id: 'vm-08-01',
                        nom: 'Réseaux eau',
                        description: 'Installation des réseaux d\'eau',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Plombier'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-08-02',
                        nom: 'Sanitaires',
                        description: 'Pose des équipements sanitaires',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Plombier'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-09',
                nom: 'Chauffage',
                description: 'Installation du système de chauffage',
                ordre: 9,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Chauffagiste'],
                prerequis: ['vm-08'],
                categorieMetier: 'EQUIPEMENTS' as const,
                obligatoire: true,
                personnalisable: true,
                sousPhases: [
                    {
                        id: 'vm-09-01',
                        nom: 'Chaudière et réseau',
                        description: 'Installation chaudière et réseau de chauffage',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Chauffagiste'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-09-02',
                        nom: 'Radiateurs',
                        description: 'Pose des radiateurs',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Chauffagiste'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-10',
                nom: 'Revêtements Sols et Murs',
                description: 'Pose des revêtements de sols et murs',
                ordre: 10,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Carreleur', 'Parqueteur'],
                prerequis: ['vm-07', 'vm-08'],
                categorieMetier: 'FINITIONS' as const,
                obligatoire: true,
                personnalisable: true,
                sousPhases: [
                    {
                        id: 'vm-10-01',
                        nom: 'Carrelage',
                        description: 'Pose du carrelage',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Carreleur'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-10-02',
                        nom: 'Parquet',
                        description: 'Pose du parquet',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Parqueteur'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-11',
                nom: 'Peinture',
                description: 'Peinture intérieure et extérieure',
                ordre: 11,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Peintre'],
                prerequis: ['vm-10'],
                categorieMetier: 'FINITIONS' as const,
                obligatoire: true,
                personnalisable: true,
                sousPhases: [
                    {
                        id: 'vm-11-01',
                        nom: 'Peinture intérieure',
                        description: 'Peinture de tous les murs intérieurs',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Peintre'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-11-02',
                        nom: 'Peinture extérieure',
                        description: 'Peinture des façades extérieures',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Peintre'],
                        obligatoire: true
                    }
                ]
            },
            {
                id: 'vm-12',
                nom: 'Finitions et Nettoyage',
                description: 'Finitions diverses et nettoyage final',
                ordre: 12,
                dureeEstimee: null,
                budgetEstime: null,
                competencesRequises: ['Finisseur'],
                prerequis: ['vm-11'],
                categorieMetier: 'FINITIONS' as const,
                obligatoire: true,
                personnalisable: false,
                sousPhases: [
                    {
                        id: 'vm-12-01',
                        nom: 'Finitions diverses',
                        description: 'Petites finitions et retouches',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Finisseur'],
                        obligatoire: true
                    },
                    {
                        id: 'vm-12-02',
                        nom: 'Nettoyage final',
                        description: 'Nettoyage complet du chantier',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Nettoyage'],
                        obligatoire: true
                    }
                ]
            }
        ];

        // Créer les templates finaux
        return [
            {
                id: 'villa-moderne',
                nom: 'Villa Moderne',
                description: 'Construction d\'une villa moderne avec prestations haut de gamme',
                categorie: 'RESIDENTIEL',
                complexiteMetier: 'MOYENNE',
                dureeGlobaleEstimee: null, // À saisir par l'utilisateur
                budgetGlobalEstime: null, // À saisir par l'utilisateur  
                nombreTotalPhases: this.countTotalPhases(villaModernePhases),
                tags: ['Villa', 'Moderne', 'Haut de gamme', 'BBC'],
                phases: villaModernePhases
            },
            {
                id: 'extension-maison',
                nom: 'Extension Maison',
                description: 'Extension latérale d\'une maison existante',
                categorie: 'RESIDENTIEL',
                complexiteMetier: 'SIMPLE',
                dureeGlobaleEstimee: null,
                budgetGlobalEstime: null,
                nombreTotalPhases: 8, // 4 phases + 4 sous-phases
                tags: ['Extension', 'Raccordement', 'Rénovation'],
                phases: [
                    {
                        id: 'em-01',
                        nom: 'Démolition et Préparation',
                        description: 'Démolitions partielles et préparation du raccordement',
                        ordre: 1,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Démolition', 'Maçonnerie'],
                        prerequis: [],
                        categorieMetier: 'GROS_OEUVRE' as const,
                        obligatoire: true,
                        personnalisable: false,
                        sousPhases: [
                            {
                                id: 'em-01-01',
                                nom: 'Ouverture mur existant',
                                description: 'Ouverture dans le mur existant pour raccordement',
                                ordre: 1,
                                dureeEstimee: null,
                                budgetEstime: null,
                                competencesRequises: ['Démolition'],
                                obligatoire: true
                            }
                        ]
                    },
                    {
                        id: 'em-02',
                        nom: 'Fondations Extension',
                        description: 'Fondations spécifiques pour l\'extension',
                        ordre: 2,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Béton armé', 'Maçonnerie'],
                        prerequis: ['em-01'],
                        categorieMetier: 'GROS_OEUVRE' as const,
                        obligatoire: true,
                        personnalisable: false,
                        sousPhases: [
                            {
                                id: 'em-02-01',
                                nom: 'Fondations raccordement',
                                description: 'Fondations avec raccordement à l\'existant',
                                ordre: 1,
                                dureeEstimee: null,
                                budgetEstime: null,
                                competencesRequises: ['Béton armé'],
                                obligatoire: true
                            }
                        ]
                    },
                    {
                        id: 'em-03',
                        nom: 'Élévation Extension',
                        description: 'Construction de l\'extension',
                        ordre: 3,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Maçonnerie'],
                        prerequis: ['em-02'],
                        categorieMetier: 'GROS_OEUVRE' as const,
                        obligatoire: true,
                        personnalisable: true,
                        sousPhases: [
                            {
                                id: 'em-03-01',
                                nom: 'Murs extension',
                                description: 'Élévation des murs de l\'extension',
                                ordre: 1,
                                dureeEstimee: null,
                                budgetEstime: null,
                                competencesRequises: ['Maçonnerie'],
                                obligatoire: true
                            }
                        ]
                    },
                    {
                        id: 'em-04',
                        nom: 'Finitions Extension',
                        description: 'Finitions et raccordements',
                        ordre: 4,
                        dureeEstimee: null,
                        budgetEstime: null,
                        competencesRequises: ['Finisseur', 'Électricien', 'Plombier'],
                        prerequis: ['em-03'],
                        categorieMetier: 'FINITIONS' as const,
                        obligatoire: true,
                        personnalisable: true,
                        sousPhases: [
                            {
                                id: 'em-04-01',
                                nom: 'Raccordements techniques',
                                description: 'Raccordements électriques et plomberie',
                                ordre: 1,
                                dureeEstimee: null,
                                budgetEstime: null,
                                competencesRequises: ['Électricien', 'Plombier'],
                                obligatoire: true
                            }
                        ]
                    }
                ]
            }
        ];
    }
}

export const typeChantierService = new TypeChantierService();
export default typeChantierService;