using projet.modele;
using projet.Controller;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace projet.View
{
    public partial class GestionAbsence : Form
    {
        private Personnel personne;
        private GestionAbsenceController controller;
        /// <summary>
        /// Méthode d'initialisation du formulaire de gestion des absences pour un personnel spécifique.
        /// </summary>
        /// <param name="personne">Personne concernée</param>
        public GestionAbsence(Personnel personne)
        {
            InitializeComponent();
            this.personne = personne;
            Init();
            labelTitle.Text = $"Gestion des absences de {personne.Nom} {personne.Prenom}";
            RemplirComboBoxMotif();
            RemplirComboBoxAbsence();
        }

        private void Init()
        {
            controller = new GestionAbsenceController();

            // Effacer les colonnes par défaut avant d'assigner la source de données
            dataGridViewAbsences.Columns.Clear();

            dataGridViewAbsences.DataSource = controller.GetAbsences(personne);
            dataGridViewAbsences.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

            // Configuration des colonnes
            dataGridViewAbsences.Columns["IdPersonnel"].Visible = false;
            dataGridViewAbsences.Columns["DateDebut"].HeaderText = "Date de début";
            dataGridViewAbsences.Columns["DateFin"].HeaderText = "Date de fin";
            dataGridViewAbsences.Columns["IdMotif"].HeaderText = "Motif";

            // Format des dates
            dataGridViewAbsences.Columns["DateDebut"].DefaultCellStyle.Format = "dd/MM/yyyy";
            dataGridViewAbsences.Columns["DateFin"].DefaultCellStyle.Format = "dd/MM/yyyy";
        }

        private void buttonAjouter_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textBoxDateDebut.Text) || !string.IsNullOrEmpty(textBoxDateFin.Text) || comboBoxMotif.SelectedItem != null)
            {
                string dateDebutStr = textBoxDateDebut.Text;
                string dateFinStr = textBoxDateFin.Text;

                DateTime dateDebut, dateFin;

                if (DateTime.TryParseExact(dateDebutStr, "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out dateDebut) &&
                    DateTime.TryParseExact(dateFinStr, "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out dateFin))
                {
                    string idMotif = Convert.ToString(((Motif)comboBoxMotif.SelectedItem).IdMotif);
                    Absence absence = new Absence(personne.IdPersonnel, dateDebut, dateFin, idMotif);
                    controller.AddAbsence(absence, personne);
                    dataGridViewAbsences.DataSource = controller.GetAbsences(personne);

                    textBoxDateDebut.Clear();
                    textBoxDateFin.Clear();
                    comboBoxMotif.SelectedIndex = -1; // Réinitialiser la sélection du motif
                    RemplirComboBoxAbsence();
                }
                else
                {
                    MessageBox.Show("Erreur : Format de date invalide\nUtilisez le format : dd-MM-yyyy", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("Veuillez remplir tous les champs.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void RemplirComboBoxMotif()
        {
            List<Motif> motifs = controller.GetAllMotifs();
            foreach (Motif motif in motifs)
            {
                comboBoxMotif.Items.Add(motif);
            }
        }

        private void buttonSupprimer_Click(object sender, EventArgs e)
        {
            if (comboBoxAbsence.SelectedIndex == -1)
            {
                MessageBox.Show("Veuillez sélectionner une absence à supprimer.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                Absence absence = (Absence)comboBoxAbsence.SelectedItem;
                int idMotif = controller.GetMotifIdByLibelle(absence.IdMotif);
                Absence absence2 = new Absence(absence.IdPersonnel, absence.DateDebut, absence.DateFin, Convert.ToString(idMotif));
                controller.DeleteAbsence(absence2);

                RemplirComboBoxAbsence();
                dataGridViewAbsences.DataSource = controller.GetAbsences(personne);
                comboBoxAbsence.SelectedIndex = -1;
            }
        }

        private void RemplirComboBoxAbsence()
        {
            comboBoxAbsence.Items.Clear();
            List<Absence> absences = controller.GetAbsences(personne);
            foreach (Absence absence in absences)
            {
                comboBoxAbsence.Items.Add(absence);
            }
        }

        private void buttonBack_Click(object sender, EventArgs e)
        {
            this.Hide();
            this.Close();
            Admin admin = new Admin();
            admin.ShowDialog();
        }

        private void btnModifAbsence_Click(object sender, EventArgs e)
        {
            if(dataGridViewAbsences.SelectedRows == null) { 
                MessageBox.Show("Veuillez sélectionner une absence à modifier.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            else
            {
                this.Hide();
                this.Close();
                ModifierAbsence modifierAbsence = new ModifierAbsence(dataGridViewAbsences.SelectedRows[0].DataBoundItem as Absence, personne);
                modifierAbsence.ShowDialog();
            }
        }

        private void buttonBack_Click_1(object sender, EventArgs e)
        {
            buttonBack_Click(sender, e);
        }
    }
}
