using ReAct_PME.ViewModels;
using Services;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using ToolsServices;


namespace ReAct_PME
{
    /// <summary>
    /// Logique d'interaction pour ListeEmails.xaml
    /// </summary>
    public partial class ListeEmails : Window, IToastNotifier
    {
        #region Variables
        private ListeEmails_VM _VM;
        private GridViewColumnHeader? _lastClickedHeader = null;
        #endregion

        #region Constructeur
        public ListeEmails()
        {
            InitializeComponent();
            _VM = new ListeEmails_VM(this);
            DataContext = _VM;
        }
        #endregion 

        #region Voir détails + recherche nouveaux emails
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            _VM.ShowSelectedItem();
        }
        private void BtnShowDetail_Click(object sender, RoutedEventArgs e)
        {
            if ((sender as Button)?.DataContext is EmailMessage msg)
            {
                _VM.SelectedItem = msg;
                _VM.ShowSelectedItem();

            }
        }


        private async void Button_Click_1(object sender, RoutedEventArgs e)
        {
            BtnRefresh.IsEnabled = false;
            await Task.Delay(100); // Permet de laisser le temps au bouton de se désactiver visuellement avant de lancer le traitement
            await _VM.RefreshEmails();
            BtnRefresh.IsEnabled = true;
        }


        private async void Button_Click_2(object sender, RoutedEventArgs e)
        {
            var rep = await _VM.SeekByKeyWord();
            if (rep != "")
            {
                NotificationManager.ShowNotification(rep, $"Réponse à votre recherche : {_VM.RechercheString}");
            }
            else
            {
                NotificationManager.ShowNotification("Il n'y a pas de réponse à votre requête...", $"Réponse à votre recherche : {_VM.RechercheString}");
            }
        }
        #endregion

        #region Tri des colonnes
        private void ColumnHeader_Click(object sender, RoutedEventArgs e)
        {
            if (_lastClickedHeader != null)
            {
                // Réinitialiser le style de l'en-tête précédent
                _lastClickedHeader.Style = (Style)Resources["DefaultColumnHeaderStyle"];
            }

            var clickedHeader = e.OriginalSource as GridViewColumnHeader;
            if (clickedHeader != null)
            {
                // Appliquer le style de la colonne cliquée
                clickedHeader.Style = (Style)Resources["ClickedColumnHeaderStyle"];
                _lastClickedHeader = clickedHeader;
            }
        }
        #endregion

        #region Fermeture fenêtre
        private void Fermer_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            LoggerService.LogInfo("ListeEmails : fenêtre fermée");
            _VM.Quit();
        }
        #endregion

        #region Implémentation de IToastNotifier
        public void ShowToast(string message, int durationMs = 10000)
        {
            Dispatcher.Invoke(() =>
            {
                ToastMessage.Text = message;
                ToastPopup.IsOpen = true;
            });

            Task.Delay(durationMs).ContinueWith(_ =>
            {
                Dispatcher.Invoke(() => ToastPopup.IsOpen = false);
            });
        }

        #endregion


    }

}
