using projet.modele;

namespace projet.dal
{
    public class AbsenceAccess
    {
        private readonly Access access;
        public AbsenceAccess()
        {
            access = Access.GetInstance();
        }

        public List<Absence> GetAbsences(Personnel personnel)
        {
            List<Absence> absences = new List<Absence>();
            if (access.Manager != null)
            {
                // Sélecte toutes les absence + join libelle du motif d'absence
                string req2 = "SELECT a.idPersonnel, a.dateDebut, a.dateFin, m.libelle FROM absence a JOIN motif m ON a.idMotif = m.idMotif WHERE a.idPersonnel = @idPersonnel ORDER BY a.dateDebut;";
                //string req = "SELECT * FROM absence WHERE idPersonnel = @idPersonnel ORDER BY dateDebut;";
                var parameters = new Dictionary<string, object>
                {
                    { "@idPersonnel", personnel.IdPersonnel }
                };
                try
                {
                    // Exécute la requête de sélection
                    List<Object[]> resultats = access.Manager.ReqSelect(req2, parameters);
                    if (resultats != null)
                    {
                        // Parcourt les résultats et crée des objets Absence
                        foreach (Object[] resultat in resultats)
                        {
                            Absence absence = new Absence(
                                Convert.ToInt32(resultat[0]), // IdPersonnel
                                Convert.ToDateTime(resultat[1]), // DateDebut
                                Convert.ToDateTime(resultat[2]), // DateFin
                                Convert.ToString(resultat[3])// Motif
                            );
                            absences.Add(absence);
                        }
                    }
                    return absences;
                }
                catch (Exception)
                {
                    Console.WriteLine("Erreur lors de la récupération des absences du personnel.");
                    Environment.Exit(0);
                }
            }
            return absences;
        }

        public void AddAbsence(Absence absence, Personnel personne)
        {
            if (access.Manager != null)
            {
                string req = "INSERT INTO absence (idPersonnel, dateDebut, dateFin, idMotif) VALUES (@idPersonnel, @dateDebut, @dateFin, @idMotif);";
                var parameters = new Dictionary<string, object>
                {
                    { "@idPersonnel", personne.IdPersonnel },
                    { "@dateDebut", absence.DateDebut },
                    { "@dateFin", absence.DateFin },
                    { "@idMotif", Convert.ToInt32(absence.IdMotif) }
                };
                try
                {
                    access.Manager.ReqUpdate(req, parameters);
                }
                catch (Exception)
                {
                    Console.WriteLine("Erreur lors de l'ajout de l'absence.");
                    Environment.Exit(0);
                }
            }
        }

        public void DeleteAbsence(Absence absence)
        {
            if (access.Manager != null)
            {
                string req = "DELETE FROM absence WHERE idPersonnel = @idPersonnel AND dateDebut = @dateDebut AND dateFin = @dateFin AND idMotif = @idMotif;";
                var parameters = new Dictionary<string, object>
                {
                    { "@idPersonnel", absence.IdPersonnel },
                    { "@dateDebut", absence.DateDebut },
                    { "@dateFin", absence.DateFin },
                    { "@idMotif", Convert.ToInt32(absence.IdMotif) }
                };
                try
                {
                    access.Manager.ReqUpdate(req, parameters);
                }
                catch (Exception)
                {
                    Console.WriteLine("Erreur lors de la suppression de l'absence.");
                    Environment.Exit(0);
                }
            }
        }
    }
}
