using projet.modele;

namespace projet.dal
{
    public class PersonnelAccess
    {
        private readonly Access access;

        public PersonnelAccess()
        {
            access = Access.GetInstance();
        }

        public List<Personnel> GetAllPersonnel()
        {
            List<Personnel> personnelList = new List<Personnel>();
            if (access.Manager != null)
            {
                string req = "SELECT * FROM personnel ORDER BY nom, prenom;";
                try
                {
                    List<Object[]> resultats = access.Manager.ReqSelect(req);
                    if (resultats != null)
                    {
                        foreach (Object[] resultat in resultats)
                        {
                            Personnel personnel = new Personnel(
                                Convert.ToInt32(resultat[0]), // IdPersonnel
                                Convert.ToString(resultat[1]), // Nom
                                Convert.ToString(resultat[2]), // Prenom
                                Convert.ToString(resultat[3]), // Tel
                                Convert.ToString(resultat[4]), // Mail
                                Convert.ToInt32(resultat[5])  // IdService
                            );
                            personnelList.Add(personnel);
                        }
                    }
                }
                catch (Exception)
                {
                    Console.WriteLine("Erreur lors de la récupération des données du personnel.");
                    Environment.Exit(0);
                }
            }
            return personnelList;
        }
        public void addPersonnel(Personnel personne)
        {
            if (access.Manager != null)
            {
                string req = "INSERT INTO personnel (nom, prenom, tel, mail, idService) VALUES (@nom, @prenom, @tel, @mail, @idService);";
                var parameters = new Dictionary<string, object>
                {
                    { "@nom", personne.Nom },
                    { "@prenom", personne.Prenom },
                    { "@tel", personne.Tel },
                    { "@mail", personne.Mail },
                    { "@idService", personne.IdService }
                };
                try
                {
                    access.Manager.ReqUpdate(req, parameters);
                }
                catch (Exception)
                {
                    Console.WriteLine("Erreur lors de l'ajout du personnel dans la base de données.");
                    Environment.Exit(0);
                }
            }
        }

        public void deletePersonnel(Personnel personnel)
        {
            if (access.Manager != null)
            {
                string req = "DELETE FROM personnel WHERE idPersonnel = @idPersonnel;";
                var parameters = new Dictionary<string, object>
                {
                    { "@idPersonnel", personnel.IdPersonnel }
                };
                try
                {
                    access.Manager.ReqUpdate(req, parameters);
                }
                catch (Exception)
                {
                    Console.WriteLine("Erreur lors de la suppression du personnel dans la base de données.");
                    Environment.Exit(0);
                }
            }
        }
        public void ModifierPersonnel(Personnel personnel)
        {
            if(access.Manager != null)
            {
                string req = "UPDATE personnel SET nom = @nom, prenom = @prenom, tel = @tel, mail = @mail, idService = @idService WHERE idPersonnel = @idPersonnel;";
                var parameters = new Dictionary<string, object>
                {
                    { "@idPersonnel", personnel.IdPersonnel },
                    { "@nom", personnel.Nom },
                    { "@prenom", personnel.Prenom },
                    { "@tel", personnel.Tel },
                    { "@mail", personnel.Mail },
                    { "@idService", personnel.IdService }
                };
                try
                {
                    access.Manager.ReqUpdate(req, parameters);
                }
                catch (Exception)
                {
                    Console.WriteLine("Erreur lors de la modification du personnel dans la base de données.");
                    Environment.Exit(0);
                }
            }
        }
    }
}
