package dev.lions.unionflow.client.view;

import jakarta.enterprise.context.SessionScoped;
import jakarta.inject.Named;
import jakarta.annotation.PostConstruct;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.logging.Logger;

@Named("configurationBean")
@SessionScoped
public class ConfigurationBean implements Serializable {
    
    private static final long serialVersionUID = 1L;
    private static final Logger LOGGER = Logger.getLogger(ConfigurationBean.class.getName());
    
    private ConfigurationGenerale general;
    private ConfigurationSecurite securite;
    private ConfigurationEmail email;
    private ConfigurationPaiements paiements;
    private ConfigurationSysteme système;
    
    // Propriétés pour la page système
    private String nomApplication = "UnionFlow";
    private String versionSysteme = "2.0.1";
    private String environnement = "PROD";
    private String timezone = "WAT";
    private String langueDefaut = "fr";
    private String deviseDefaut = "XOF";
    private String urlBaseApplication = "https://unionflow.app";
    private String formatDate = "dd/MM/yyyy";
    private String organisationPrincipale = "Lions Clubs Afrique de l'Ouest";
    
    // Configuration BDD enrichie
    private String typeBDD = "postgresql";
    private String serveurBDD = "localhost";
    private Integer portBDD = 5432;
    private String nomBDD = "unionflow";
    private String utilisateurBDD = "unionflow_user";
    private String motDePasseBDD = "";
    private Integer taillePoolConnexions = 20;
    private Boolean sslActifBDD = true;
    
    // Configuration Email enrichie
    private String serveurSMTP = "smtp.gmail.com";
    private Integer portSMTP = 587;
    private String emailExpediteur = "noreply@unionflow.app";
    private String nomExpediteur = "UnionFlow Notifications";
    private Boolean authentificationSMTP = true;
    private String utilisateurSMTP = "";
    private String motDePasseSMTP = "";
    private Boolean tlsActive = true;
    private Integer limiteTauxEmail = 500;
    
    // Configuration Sécurité enrichie
    private Integer timeoutSession = 30;
    private Integer tentativesMaxConnexion = 5;
    private Boolean forcerChangementMotDePasse = true;
    private Boolean authentification2FA = true;
    private Boolean journaliserEvenementsSecurite = true;
    private String complexiteMotDePasse = "MEDIUM";
    private Integer dureeValiditeMotDePasse = 90;
    private Integer retentionLogs = 365;
    private Boolean chiffrementBDD = true;
    
    // Propriétés d'état système
    private String tempsActivite = "99.8%";
    private Integer utilisateursConnectes = 247;
    private Integer memoireUtilisee = 68;
    private String memoireTotal = "16";
    private String derniereSauvegarde = "02:00";
    
    // Monitoring avancé
    private Integer cpuUtilisation = 45;
    private Float disqueDisponible = 127.5f;
    private Integer connexionsBDDActives = 15;
    private Integer queueEmailsEnAttente = 23;
    private Integer logsErreurs24h = 8;
    private Integer sessionsActives = 127;
    
    // Configuration avancée
    private Boolean modeMaintenance = false;
    private String frequenceSauvegarde = "DAILY";
    private Integer retentionSauvegardes = 30;
    private String emailAlertes = "admin@unionflow.app";
    private Boolean alertesCPU = true;
    private Boolean alertesMemoire = true;
    private Boolean alertesDisque = true;
    
    @PostConstruct
    public void init() {
        initializeGeneral();
        initializeSecurite();
        initializeEmail();
        initializePaiements();
        initializeSysteme();
        calculerMetriquesSysteme();
    }
    
    private void calculerMetriquesSysteme() {
        // Simulation des métriques système réelles pour UnionFlow
        cpuUtilisation = (int) (Math.random() * 30) + 40; // 40-70%
        memoireUtilisee = (int) (Math.random() * 20) + 60; // 60-80%
        disqueDisponible = (float) (Math.random() * 50) + 100; // 100-150 GB
        connexionsBDDActives = (int) (Math.random() * 10) + 10; // 10-20
        queueEmailsEnAttente = (int) (Math.random() * 50) + 10; // 10-60
        logsErreurs24h = (int) (Math.random() * 20) + 5; // 5-25
        sessionsActives = utilisateursConnectes; // Basé sur utilisateurs connectés
        
        // Optimisé pour la stratégie volume (127 organisations, 247 utilisateurs)
        utilisateursConnectes = 247;
        sessionsActives = 127; // Une session par organisation active
    }
    
    private void initializeGeneral() {
        general = new ConfigurationGenerale();
        general.setNomOrganisation("Organisation Centrale");
        general.setSigleOrganisation("ORG-001");
        general.setSiteWeb("https://unionflow.app");
        general.setEmailContact("contact@unionflow.app");
        general.setLangueDefaut("fr");
        general.setDevise("XOF");
        general.setFuseauHoraire("GMT");
        general.setModeMaintenanceActif(false);
    }
    
    private void initializeSecurite() {
        securite = new ConfigurationSecurite();
        securite.setLongueurMinMotPasse(8);
        securite.setExigerMajuscules(true);
        securite.setExigerChiffres(true);
        securite.setExigerCaracteresSpeciaux(false);
        securite.setExpirationMotPasse(90);
        securite.setTentativesConnexionMax(5);
        securite.setDureeBlocage(15);
        securite.setTimeoutSession(60);
        securite.setDoubleFacteurObligatoire(false);
        securite.setJournalisationAvancee(true);
    }
    
    private void initializeEmail() {
        email = new ConfigurationEmail();
        email.setServeurSMTP("smtp.gmail.com");
        email.setPortSMTP(587);
        email.setUtilisateurSMTP("noreply@unionflow.app");
        email.setMotPasseSMTP("**********");
        email.setUtiliserSSL(true);
        email.setEmailExpediteur("noreply@unionflow.app");
        email.setNomExpediteur("UnionFlow Platform");
        email.setNotifierNouveauMembre(true);
        email.setNotifierEvenements(true);
        email.setRappelCotisations(true);
    }
    
    private void initializePaiements() {
        paiements = new ConfigurationPaiements();
        paiements.setWaveActif(true);
        paiements.setWaveApiKey("**********");
        paiements.setWaveSecretKey("**********");
        paiements.setWaveEnvironnement("sandbox");
        paiements.setEspècesActif(true);
        paiements.setChèqueActif(true);
        paiements.setVirementActif(true);
        paiements.setIbanOrganisation("CI05 CI01 2345 6789 0123 4567 89");
        paiements.setFraisPaiement(2.5);
    }
    
    private void initializeSysteme() {
        système = new ConfigurationSysteme();
        système.setCacheActivé(true);
        système.setDureeCacheMinutes(30);
        système.setTailleLotTraitement(100);
        système.setNiveauLog("INFO");
        système.setRetentionLogJours(30);
        système.setMétriquesActivées(true);
        système.setAlertesSystemeActivées(true);
    }
    
    // Actions générales
    public void sauvegarderTout() {
        LOGGER.info("Configuration complète sauvegardée à " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")));
    }
    
    public void reinitialiser() {
        init();
        LOGGER.info("Configuration réinitialisée aux valeurs par défaut");
    }
    
    public void exporterConfiguration() {
        LOGGER.info("Export de la configuration généré");
    }
    
    // Actions par section
    public void sauvegarderGeneral() {
        LOGGER.info("Configuration générale sauvegardée");
    }
    
    public void sauvegarderSecurite() {
        LOGGER.info("Configuration sécurité sauvegardée");
    }
    
    public void sauvegarderEmail() {
        LOGGER.info("Configuration email sauvegardée");
    }
    
    // Actions pour la page système
    public void sauvegarderConfiguration() {
        LOGGER.info("Configuration système sauvegardée");
    }
    
    public void restaurerDefauts() {
        nomApplication = "UnionFlow";
        versionSysteme = "1.0.0";
        environnement = "DEV";
        LOGGER.info("Configuration système restaurée aux valeurs par défaut");
    }
    
    public void testerConnexionBDD() {
        // Le test de connexion BDD sera implémenté via l'API backend
        // Pour l'instant, log uniquement
        LOGGER.info("Test de connexion BDD: " + typeBDD + "://" + serveurBDD + ":" + portBDD + "/" + nomBDD);
    }
    
    public void testerEmail() {
        // Le test d'email sera implémenté via l'API backend
        // Pour l'instant, log uniquement
        LOGGER.info("Test d'envoi d'email via " + serveurSMTP + ":" + portSMTP);
    }
    
    public void forcerSauvegarde() {
        // La sauvegarde sera déclenchée via l'API backend
        LOGGER.info("Sauvegarde forcée du système");
        derniereSauvegarde = LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm"));
    }
    
    public void redemarrerServices() {
        // Le redémarrage des services sera géré via l'API backend
        LOGGER.info("Redémarrage des services système en cours...");
    }
    
    public void sauvegarderPaiements() {
        LOGGER.info("Configuration paiements sauvegardée");
    }
    
    public void sauvegarderSysteme() {
        LOGGER.info("Configuration système sauvegardée");
    }
    
    // Actions système
    public void viderCache() {
        LOGGER.info("Cache vidé avec succès");
    }
    
    public void optimiserBaseDonnees() {
        LOGGER.info("Optimisation de la base de données en cours...");
    }
    
    public void sauvegarderBaseDonnees() {
        LOGGER.info("Sauvegarde de la base de données initiée");
    }
    
    public String voirLogsSysteme() {
        return "/pages/super-admin/logs?faces-redirect=true";
    }
    
    // Getters et Setters
    public ConfigurationGenerale getGeneral() { return general; }
    public void setGeneral(ConfigurationGenerale general) { this.general = general; }
    
    public ConfigurationSecurite getSecurite() { return securite; }
    public void setSecurite(ConfigurationSecurite securite) { this.securite = securite; }
    
    public ConfigurationEmail getEmail() { return email; }
    public void setEmail(ConfigurationEmail email) { this.email = email; }
    
    public ConfigurationPaiements getPaiements() { return paiements; }
    public void setPaiements(ConfigurationPaiements paiements) { this.paiements = paiements; }
    
    public ConfigurationSysteme getSystème() { return système; }
    public void setSystème(ConfigurationSysteme système) { this.système = système; }
    
    // Classes internes pour la configuration
    public static class ConfigurationGenerale {
        private String nomOrganisation;
        private String sigleOrganisation;
        private String siteWeb;
        private String emailContact;
        private String langueDefaut;
        private String devise;
        private String fuseauHoraire;
        private boolean modeMaintenanceActif;
        
        // Getters et setters
        public String getNomOrganisation() { return nomOrganisation; }
        public void setNomOrganisation(String nomOrganisation) { this.nomOrganisation = nomOrganisation; }
        
        public String getSigleOrganisation() { return sigleOrganisation; }
        public void setSigleOrganisation(String sigleOrganisation) { this.sigleOrganisation = sigleOrganisation; }
        
        public String getSiteWeb() { return siteWeb; }
        public void setSiteWeb(String siteWeb) { this.siteWeb = siteWeb; }
        
        public String getEmailContact() { return emailContact; }
        public void setEmailContact(String emailContact) { this.emailContact = emailContact; }
        
        public String getLangueDefaut() { return langueDefaut; }
        public void setLangueDefaut(String langueDefaut) { this.langueDefaut = langueDefaut; }
        
        public String getDevise() { return devise; }
        public void setDevise(String devise) { this.devise = devise; }
        
        public String getFuseauHoraire() { return fuseauHoraire; }
        public void setFuseauHoraire(String fuseauHoraire) { this.fuseauHoraire = fuseauHoraire; }
        
        public boolean isModeMaintenanceActif() { return modeMaintenanceActif; }
        public void setModeMaintenanceActif(boolean modeMaintenanceActif) { this.modeMaintenanceActif = modeMaintenanceActif; }
    }
    
    public static class ConfigurationSecurite {
        private int longueurMinMotPasse;
        private boolean exigerMajuscules;
        private boolean exigerChiffres;
        private boolean exigerCaracteresSpeciaux;
        private int expirationMotPasse;
        private int tentativesConnexionMax;
        private int dureeBlocage;
        private int timeoutSession;
        private boolean doubleFacteurObligatoire;
        private boolean journalisationAvancee;
        
        // Getters et setters
        public int getLongueurMinMotPasse() { return longueurMinMotPasse; }
        public void setLongueurMinMotPasse(int longueurMinMotPasse) { this.longueurMinMotPasse = longueurMinMotPasse; }
        
        public boolean isExigerMajuscules() { return exigerMajuscules; }
        public void setExigerMajuscules(boolean exigerMajuscules) { this.exigerMajuscules = exigerMajuscules; }
        
        public boolean isExigerChiffres() { return exigerChiffres; }
        public void setExigerChiffres(boolean exigerChiffres) { this.exigerChiffres = exigerChiffres; }
        
        public boolean isExigerCaracteresSpeciaux() { return exigerCaracteresSpeciaux; }
        public void setExigerCaracteresSpeciaux(boolean exigerCaracteresSpeciaux) { this.exigerCaracteresSpeciaux = exigerCaracteresSpeciaux; }
        
        public int getExpirationMotPasse() { return expirationMotPasse; }
        public void setExpirationMotPasse(int expirationMotPasse) { this.expirationMotPasse = expirationMotPasse; }
        
        public int getTentativesConnexionMax() { return tentativesConnexionMax; }
        public void setTentativesConnexionMax(int tentativesConnexionMax) { this.tentativesConnexionMax = tentativesConnexionMax; }
        
        public int getDureeBlocage() { return dureeBlocage; }
        public void setDureeBlocage(int dureeBlocage) { this.dureeBlocage = dureeBlocage; }
        
        public int getTimeoutSession() { return timeoutSession; }
        public void setTimeoutSession(int timeoutSession) { this.timeoutSession = timeoutSession; }
        
        public boolean isDoubleFacteurObligatoire() { return doubleFacteurObligatoire; }
        public void setDoubleFacteurObligatoire(boolean doubleFacteurObligatoire) { this.doubleFacteurObligatoire = doubleFacteurObligatoire; }
        
        public boolean isJournalisationAvancee() { return journalisationAvancee; }
        public void setJournalisationAvancee(boolean journalisationAvancee) { this.journalisationAvancee = journalisationAvancee; }
    }
    
    public static class ConfigurationEmail {
        private String serveurSMTP;
        private int portSMTP;
        private String utilisateurSMTP;
        private String motPasseSMTP;
        private boolean utiliserSSL;
        private String emailExpediteur;
        private String nomExpediteur;
        private boolean notifierNouveauMembre;
        private boolean notifierEvenements;
        private boolean rappelCotisations;
        
        // Getters et setters
        public String getServeurSMTP() { return serveurSMTP; }
        public void setServeurSMTP(String serveurSMTP) { this.serveurSMTP = serveurSMTP; }
        
        public int getPortSMTP() { return portSMTP; }
        public void setPortSMTP(int portSMTP) { this.portSMTP = portSMTP; }
        
        public String getUtilisateurSMTP() { return utilisateurSMTP; }
        public void setUtilisateurSMTP(String utilisateurSMTP) { this.utilisateurSMTP = utilisateurSMTP; }
        
        public String getMotPasseSMTP() { return motPasseSMTP; }
        public void setMotPasseSMTP(String motPasseSMTP) { this.motPasseSMTP = motPasseSMTP; }
        
        public boolean isUtiliserSSL() { return utiliserSSL; }
        public void setUtiliserSSL(boolean utiliserSSL) { this.utiliserSSL = utiliserSSL; }
        
        public String getEmailExpediteur() { return emailExpediteur; }
        public void setEmailExpediteur(String emailExpediteur) { this.emailExpediteur = emailExpediteur; }
        
        public String getNomExpediteur() { return nomExpediteur; }
        public void setNomExpediteur(String nomExpediteur) { this.nomExpediteur = nomExpediteur; }
        
        public boolean isNotifierNouveauMembre() { return notifierNouveauMembre; }
        public void setNotifierNouveauMembre(boolean notifierNouveauMembre) { this.notifierNouveauMembre = notifierNouveauMembre; }
        
        public boolean isNotifierEvenements() { return notifierEvenements; }
        public void setNotifierEvenements(boolean notifierEvenements) { this.notifierEvenements = notifierEvenements; }
        
        public boolean isRappelCotisations() { return rappelCotisations; }
        public void setRappelCotisations(boolean rappelCotisations) { this.rappelCotisations = rappelCotisations; }
    }
    
    public static class ConfigurationPaiements {
        private boolean waveActif;
        private String waveApiKey;
        private String waveSecretKey;
        private String waveEnvironnement;
        private boolean espècesActif;
        private boolean chèqueActif;
        private boolean virementActif;
        private String ibanOrganisation;
        private double fraisPaiement;
        
        // Getters et setters
        public boolean isWaveActif() { return waveActif; }
        public void setWaveActif(boolean waveActif) { this.waveActif = waveActif; }
        
        public String getWaveApiKey() { return waveApiKey; }
        public void setWaveApiKey(String waveApiKey) { this.waveApiKey = waveApiKey; }
        
        public String getWaveSecretKey() { return waveSecretKey; }
        public void setWaveSecretKey(String waveSecretKey) { this.waveSecretKey = waveSecretKey; }
        
        public String getWaveEnvironnement() { return waveEnvironnement; }
        public void setWaveEnvironnement(String waveEnvironnement) { this.waveEnvironnement = waveEnvironnement; }
        
        public boolean isEspècesActif() { return espècesActif; }
        public void setEspècesActif(boolean espècesActif) { this.espècesActif = espècesActif; }
        
        public boolean isChèqueActif() { return chèqueActif; }
        public void setChèqueActif(boolean chèqueActif) { this.chèqueActif = chèqueActif; }
        
        public boolean isVirementActif() { return virementActif; }
        public void setVirementActif(boolean virementActif) { this.virementActif = virementActif; }
        
        public String getIbanOrganisation() { return ibanOrganisation; }
        public void setIbanOrganisation(String ibanOrganisation) { this.ibanOrganisation = ibanOrganisation; }
        
        public double getFraisPaiement() { return fraisPaiement; }
        public void setFraisPaiement(double fraisPaiement) { this.fraisPaiement = fraisPaiement; }
    }
    
    // Getters et setters pour les propriétés système
    public String getNomApplication() { return nomApplication; }
    public void setNomApplication(String nomApplication) { this.nomApplication = nomApplication; }
    
    public String getVersionSysteme() { return versionSysteme; }
    public void setVersionSysteme(String versionSysteme) { this.versionSysteme = versionSysteme; }
    
    public String getEnvironnement() { return environnement; }
    public void setEnvironnement(String environnement) { this.environnement = environnement; }
    
    public String getTimezone() { return timezone; }
    public void setTimezone(String timezone) { this.timezone = timezone; }
    
    public String getLangueDefaut() { return langueDefaut; }
    public void setLangueDefaut(String langueDefaut) { this.langueDefaut = langueDefaut; }
    
    public String getTypeBDD() { return typeBDD; }
    public void setTypeBDD(String typeBDD) { this.typeBDD = typeBDD; }
    
    public String getServeurBDD() { return serveurBDD; }
    public void setServeurBDD(String serveurBDD) { this.serveurBDD = serveurBDD; }
    
    public Integer getPortBDD() { return portBDD; }
    public void setPortBDD(Integer portBDD) { this.portBDD = portBDD; }
    
    public String getNomBDD() { return nomBDD; }
    public void setNomBDD(String nomBDD) { this.nomBDD = nomBDD; }
    
    public String getServeurSMTP() { return serveurSMTP; }
    public void setServeurSMTP(String serveurSMTP) { this.serveurSMTP = serveurSMTP; }
    
    public Integer getPortSMTP() { return portSMTP; }
    public void setPortSMTP(Integer portSMTP) { this.portSMTP = portSMTP; }
    
    public String getEmailExpediteur() { return emailExpediteur; }
    public void setEmailExpediteur(String emailExpediteur) { this.emailExpediteur = emailExpediteur; }
    
    public Boolean getAuthentificationSMTP() { return authentificationSMTP; }
    public void setAuthentificationSMTP(Boolean authentificationSMTP) { this.authentificationSMTP = authentificationSMTP; }
    
    public Boolean getTlsActive() { return tlsActive; }
    public void setTlsActive(Boolean tlsActive) { this.tlsActive = tlsActive; }
    
    public Integer getTimeoutSession() { return timeoutSession; }
    public void setTimeoutSession(Integer timeoutSession) { this.timeoutSession = timeoutSession; }
    
    public Integer getTentativesMaxConnexion() { return tentativesMaxConnexion; }
    public void setTentativesMaxConnexion(Integer tentativesMaxConnexion) { this.tentativesMaxConnexion = tentativesMaxConnexion; }
    
    public Boolean getForcerChangementMotDePasse() { return forcerChangementMotDePasse; }
    public void setForcerChangementMotDePasse(Boolean forcerChangementMotDePasse) { this.forcerChangementMotDePasse = forcerChangementMotDePasse; }
    
    public Boolean getAuthentification2FA() { return authentification2FA; }
    public void setAuthentification2FA(Boolean authentification2FA) { this.authentification2FA = authentification2FA; }
    
    public Boolean getJournaliserEvenementsSecurite() { return journaliserEvenementsSecurite; }
    public void setJournaliserEvenementsSecurite(Boolean journaliserEvenementsSecurite) { this.journaliserEvenementsSecurite = journaliserEvenementsSecurite; }
    
    public String getTempsActivite() { return tempsActivite; }
    public void setTempsActivite(String tempsActivite) { this.tempsActivite = tempsActivite; }
    
    public Integer getUtilisateursConnectes() { return utilisateursConnectes; }
    public void setUtilisateursConnectes(Integer utilisateursConnectes) { this.utilisateursConnectes = utilisateursConnectes; }
    
    public Integer getMemoireUtilisee() { return memoireUtilisee; }
    public void setMemoireUtilisee(Integer memoireUtilisee) { this.memoireUtilisee = memoireUtilisee; }
    
    public String getMemoireTotal() { return memoireTotal; }
    public void setMemoireTotal(String memoireTotal) { this.memoireTotal = memoireTotal; }
    
    public String getDerniereSauvegarde() { return derniereSauvegarde; }
    public void setDerniereSauvegarde(String derniereSauvegarde) { this.derniereSauvegarde = derniereSauvegarde; }
    
    // Nouveaux getters/setters pour configuration enrichie
    public String getDeviseDefaut() { return deviseDefaut; }
    public void setDeviseDefaut(String deviseDefaut) { this.deviseDefaut = deviseDefaut; }
    
    public String getUrlBaseApplication() { return urlBaseApplication; }
    public void setUrlBaseApplication(String urlBaseApplication) { this.urlBaseApplication = urlBaseApplication; }
    
    public String getFormatDate() { return formatDate; }
    public void setFormatDate(String formatDate) { this.formatDate = formatDate; }
    
    public String getOrganisationPrincipale() { return organisationPrincipale; }
    public void setOrganisationPrincipale(String organisationPrincipale) { this.organisationPrincipale = organisationPrincipale; }
    
    public String getUtilisateurBDD() { return utilisateurBDD; }
    public void setUtilisateurBDD(String utilisateurBDD) { this.utilisateurBDD = utilisateurBDD; }
    
    public String getMotDePasseBDD() { return motDePasseBDD; }
    public void setMotDePasseBDD(String motDePasseBDD) { this.motDePasseBDD = motDePasseBDD; }
    
    public Integer getTaillePoolConnexions() { return taillePoolConnexions; }
    public void setTaillePoolConnexions(Integer taillePoolConnexions) { this.taillePoolConnexions = taillePoolConnexions; }
    
    public Boolean getSslActifBDD() { return sslActifBDD; }
    public void setSslActifBDD(Boolean sslActifBDD) { this.sslActifBDD = sslActifBDD; }
    
    public String getNomExpediteur() { return nomExpediteur; }
    public void setNomExpediteur(String nomExpediteur) { this.nomExpediteur = nomExpediteur; }
    
    public String getUtilisateurSMTP() { return utilisateurSMTP; }
    public void setUtilisateurSMTP(String utilisateurSMTP) { this.utilisateurSMTP = utilisateurSMTP; }
    
    public String getMotDePasseSMTP() { return motDePasseSMTP; }
    public void setMotDePasseSMTP(String motDePasseSMTP) { this.motDePasseSMTP = motDePasseSMTP; }
    
    public Integer getLimiteTauxEmail() { return limiteTauxEmail; }
    public void setLimiteTauxEmail(Integer limiteTauxEmail) { this.limiteTauxEmail = limiteTauxEmail; }
    
    public String getComplexiteMotDePasse() { return complexiteMotDePasse; }
    public void setComplexiteMotDePasse(String complexiteMotDePasse) { this.complexiteMotDePasse = complexiteMotDePasse; }
    
    public Integer getDureeValiditeMotDePasse() { return dureeValiditeMotDePasse; }
    public void setDureeValiditeMotDePasse(Integer dureeValiditeMotDePasse) { this.dureeValiditeMotDePasse = dureeValiditeMotDePasse; }
    
    public Integer getRetentionLogs() { return retentionLogs; }
    public void setRetentionLogs(Integer retentionLogs) { this.retentionLogs = retentionLogs; }
    
    public Boolean getChiffrementBDD() { return chiffrementBDD; }
    public void setChiffrementBDD(Boolean chiffrementBDD) { this.chiffrementBDD = chiffrementBDD; }
    
    public Integer getCpuUtilisation() { return cpuUtilisation; }
    public void setCpuUtilisation(Integer cpuUtilisation) { this.cpuUtilisation = cpuUtilisation; }
    
    public Float getDisqueDisponible() { return disqueDisponible; }
    public void setDisqueDisponible(Float disqueDisponible) { this.disqueDisponible = disqueDisponible; }
    
    public Integer getConnexionsBDDActives() { return connexionsBDDActives; }
    public void setConnexionsBDDActives(Integer connexionsBDDActives) { this.connexionsBDDActives = connexionsBDDActives; }
    
    public Integer getQueueEmailsEnAttente() { return queueEmailsEnAttente; }
    public void setQueueEmailsEnAttente(Integer queueEmailsEnAttente) { this.queueEmailsEnAttente = queueEmailsEnAttente; }
    
    public Integer getLogsErreurs24h() { return logsErreurs24h; }
    public void setLogsErreurs24h(Integer logsErreurs24h) { this.logsErreurs24h = logsErreurs24h; }
    
    public Integer getSessionsActives() { return sessionsActives; }
    public void setSessionsActives(Integer sessionsActives) { this.sessionsActives = sessionsActives; }
    
    public Boolean getModeMaintenance() { return modeMaintenance; }
    public void setModeMaintenance(Boolean modeMaintenance) { this.modeMaintenance = modeMaintenance; }
    
    public String getFrequenceSauvegarde() { return frequenceSauvegarde; }
    public void setFrequenceSauvegarde(String frequenceSauvegarde) { this.frequenceSauvegarde = frequenceSauvegarde; }
    
    public Integer getRetentionSauvegardes() { return retentionSauvegardes; }
    public void setRetentionSauvegardes(Integer retentionSauvegardes) { this.retentionSauvegardes = retentionSauvegardes; }
    
    public String getEmailAlertes() { return emailAlertes; }
    public void setEmailAlertes(String emailAlertes) { this.emailAlertes = emailAlertes; }
    
    public Boolean getAlertesCPU() { return alertesCPU; }
    public void setAlertesCPU(Boolean alertesCPU) { this.alertesCPU = alertesCPU; }
    
    public Boolean getAlertesMemoire() { return alertesMemoire; }
    public void setAlertesMemoire(Boolean alertesMemoire) { this.alertesMemoire = alertesMemoire; }
    
    public Boolean getAlertesDisque() { return alertesDisque; }
    public void setAlertesDisque(Boolean alertesDisque) { this.alertesDisque = alertesDisque; }
    
    // Méthodes utilitaires pour les styles CSS conditionnels
    public String getCpuUtilisationStyle() {
        return cpuUtilisation != null && cpuUtilisation > 80 ? "text-red-500" : "text-green-500";
    }
    
    public String getDisqueDisponibleStyle() {
        return disqueDisponible != null && disqueDisponible < 10 ? "text-red-500" : "text-blue-500";
    }
    
    public String getQueueEmailsStyle() {
        return queueEmailsEnAttente != null && queueEmailsEnAttente > 100 ? "text-orange-500" : "text-green-500";
    }
    
    public String getLogsErreursStyle() {
        return logsErreurs24h != null && logsErreurs24h > 50 ? "text-red-500" : "text-green-500";
    }
    
    public String getMemoireUtiliseeStyle() {
        return memoireUtilisee != null && memoireUtilisee > 85 ? "text-red-500" : "text-green-500";
    }
    
    // Méthodes pour les alertes système
    public String getCpuAlertStyle() {
        return cpuUtilisation != null && cpuUtilisation > 80 ? "bg-red-100" : "bg-green-100";
    }
    
    public String getCpuAlertIcon() {
        return cpuUtilisation != null && cpuUtilisation > 80 ? "pi-exclamation-triangle text-red-500" : "pi-check text-green-500";
    }
    
    public String getCpuAlertText() {
        return cpuUtilisation != null && cpuUtilisation > 80 ? "ALERTE" : "NORMAL";
    }
    
    public String getMemoireAlertStyle() {
        return memoireUtilisee != null && memoireUtilisee > 85 ? "bg-red-100" : "bg-green-100";
    }
    
    public String getMemoireAlertIcon() {
        return memoireUtilisee != null && memoireUtilisee > 85 ? "pi-exclamation-triangle text-red-500" : "pi-check text-green-500";
    }
    
    public String getMemoireAlertText() {
        return memoireUtilisee != null && memoireUtilisee > 85 ? "ALERTE" : "NORMAL";
    }
    
    public String getDisqueAlertStyle() {
        return disqueDisponible != null && disqueDisponible < 10 ? "bg-red-100" : "bg-green-100";
    }
    
    public String getDisqueAlertIcon() {
        return disqueDisponible != null && disqueDisponible < 10 ? "pi-exclamation-triangle text-red-500" : "pi-check text-green-500";
    }
    
    public String getDisqueAlertText() {
        return disqueDisponible != null && disqueDisponible < 10 ? "CRITIQUE" : "NORMAL";
    }
    
    // Méthodes d'actions
    public void actualiserMonitoring() {
        calculerMetriquesSysteme();
        LOGGER.info("Monitoring actualisé");
    }
    
    public void nettoyerCache() {
        LOGGER.info("Cache système nettoyé");
    }
    
    public void auditSysteme() {
        LOGGER.info("Audit système lancé");
    }
    
    public void appliquerConfigGenerale() {
        LOGGER.info("Configuration générale appliquée");
    }
    
    public void appliquerConfigBDD() {
        LOGGER.info("Configuration BDD appliquée");
    }
    
    public void appliquerConfigEmail() {
        LOGGER.info("Configuration email appliquée");
    }
    
    public void appliquerConfigSecurite() {
        LOGGER.info("Configuration sécurité appliquée");
    }
    
    public void sauvegarderAlertes() {
        LOGGER.info("Configuration des alertes sauvegardée");
    }

    public static class ConfigurationSysteme {
        private boolean cacheActivé;
        private int dureeCacheMinutes;
        private int tailleLotTraitement;
        private String niveauLog;
        private int retentionLogJours;
        private boolean métriquesActivées;
        private boolean alertesSystemeActivées;
        
        // Getters et setters
        public boolean isCacheActivé() { return cacheActivé; }
        public void setCacheActivé(boolean cacheActivé) { this.cacheActivé = cacheActivé; }
        
        public int getDureeCacheMinutes() { return dureeCacheMinutes; }
        public void setDureeCacheMinutes(int dureeCacheMinutes) { this.dureeCacheMinutes = dureeCacheMinutes; }
        
        public int getTailleLotTraitement() { return tailleLotTraitement; }
        public void setTailleLotTraitement(int tailleLotTraitement) { this.tailleLotTraitement = tailleLotTraitement; }
        
        public String getNiveauLog() { return niveauLog; }
        public void setNiveauLog(String niveauLog) { this.niveauLog = niveauLog; }
        
        public int getRetentionLogJours() { return retentionLogJours; }
        public void setRetentionLogJours(int retentionLogJours) { this.retentionLogJours = retentionLogJours; }
        
        public boolean isMétriquesActivées() { return métriquesActivées; }
        public void setMétriquesActivées(boolean métriquesActivées) { this.métriquesActivées = métriquesActivées; }
        
        public boolean isAlertesSystemeActivées() { return alertesSystemeActivées; }
        public void setAlertesSystemeActivées(boolean alertesSystemeActivées) { this.alertesSystemeActivées = alertesSystemeActivées; }
    }
}