package com.fira.one;

import java.util.HashMap;
import java.util.Map;

import javax.annotation.PostConstruct;

import com.fira.one.domain.conseil.Conseil;
import com.fira.one.domain.conseil.ConseilRepository;
import com.fira.one.domain.formation.Formation;
import com.fira.one.domain.formation.FormationRepository;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Init {

    private static final Logger logger = LoggerFactory.getLogger(Init.class);

    @Value("${docker.server.port}")
    private String serverPort;

    @Autowired
    private ConseilRepository conseilRepository;

    @Autowired
    private FormationRepository formationRepository;

    @PostConstruct
    public void init() {
        var url = String.format("🚀 http://localhost:%1s", serverPort);
        logger.info("------------------------------------------");
        logger.info(url);
        logger.info("------------------------------------------");
        if (conseilRepository.findAll().isEmpty()) {
            logger.info("Init conseils");
            initConseils();
        }
        if (formationRepository.findAll().isEmpty()) {
            logger.info("Init formations");
            initFormations();
        }
    }

    private void initConseils() {
        String[] conseils = { "Méthode pour clarifier et déployer une vision et une stratégie",
                "Développement de la performance d’une organisation", "Mise en place d’une démarche qualité",
                "Préparation à l’audit de certification ISO 9001",
                "Réalisation d’audit interne, fournisseur, tierce partie", "Diminution des coûts de dysfonctionnement",
                "Traitement des réclamations clients", "Mise en œuvre des opportunités d’amélioration",
                "Approche risques", "Simplification de la documentation",
                "Réalisation d’enquêtes de satisfaction clients", "Réalisation d’enquêtes de satisfaction internes",
                "Réalisation des entretiens professionnels", "Document unique d’évaluation des risques professionnels",
                "Gestion prévisonnelle des emplois et des compétences", "Améliorer les performances avec l'outil EFQM",
                "La communication interne", "Aide au recrutement" };
        for (String conseilTitre : conseils) {
            Conseil conseil = new Conseil();
            conseil.setName(conseilTitre);
            conseilRepository.save(conseil);
        }
    }

    private void initFormations() {
        Map<String, Integer> formations = new HashMap<>();
        formations.put("Mettre en place une organisation performante", 2);
        formations.put("L'intérêt d'une démarche qualité", 1);
        formations.put("Mettre en oeuvre la norme ISO 9001 version 2015", 2);
        formations.put("Comprendre les évolutions de l'ISO 9001 version 2015", 1);
        formations.put("Les bonnes pratiques du modèle d'excellence européen EFQM", 2);
        formations.put("Pratiquer l'audit interne", 2);
        formations.put("Devenir un animateur qualité performant", 2);
        formations.put("S'organiser pour réussir sa vie professionnelle et personnelle", 2);
        formations.put("Manager une équipe", 2);
        formations.put("Conduire un entretien professionnel et un entretien d'évaluation motivant", 2);
        formations.put("Bâtir une Gestion Prévisionnelle des Emplois et des Compétences", 3);
        formations.put("La formation professionnelle et son financement", 2);
        formations.put("Animer une formation", 2);
        formations.put("Prendre la parole en public", 2);
        formations.put("Gérer le plan de formation professionnelle", 2);
        formations.put("Gestion de projet", 2);

        formations.entrySet().stream().forEach(entry -> {
            int nbJoursFormation = entry.getValue();
            String jours = "";
            if (nbJoursFormation > 1) {
                jours = String.valueOf(nbJoursFormation) + " jours";
            } else {
                jours = String.valueOf(nbJoursFormation) + " jour";
            }
            Formation formation = new Formation();
            formation.setName(entry.getKey());
            formation.setDuration(jours);
            formationRepository.save(formation);
        });

    }

}