using System;
using System.Windows;
using System.Windows.Media.Animation;
using System.Windows.Threading;

namespace GTPCorrgir
{
    public partial class notificacion : Window
    {
        private readonly DispatcherTimer autoCloseTimer;
        private readonly DispatcherTimer progressTimer;
        private double progressValue = 0;
        private const int AUTO_CLOSE_SECONDS = 5;
        private const int PROGRESS_UPDATE_INTERVAL = 50; // milisegundos

        public notificacion()
        {
            InitializeComponent();
            PositionWindow();

            // Configurar el timer para auto-cierre
            autoCloseTimer = new DispatcherTimer
            {
                Interval = TimeSpan.FromSeconds(AUTO_CLOSE_SECONDS)
            };
            autoCloseTimer.Tick += AutoCloseTimer_Tick;

            // Configurar el timer para la barra de progreso
            progressTimer = new DispatcherTimer
            {
                Interval = TimeSpan.FromMilliseconds(PROGRESS_UPDATE_INTERVAL)
            };
            progressTimer.Tick += ProgressTimer_Tick;

            // Iniciar animación de entrada
            Loaded += (s, e) =>
            {
                var storyboard = (Storyboard)FindResource("FadeIn");
                storyboard.Begin(this);
                autoCloseTimer.Start();
                progressTimer.Start();
            };
        }

        private void PositionWindow()
        {
            var cursorPosition = System.Windows.Forms.Cursor.Position;
            var screen = System.Windows.Forms.Screen.FromPoint(cursorPosition);

            this.Left = screen.WorkingArea.Right - this.Width - 20;
            this.Top = screen.WorkingArea.Bottom - this.Height - 20;
        }

        public void UpdateNotification(string title, string message)
        {
            TitleText.Text = title;
            MessageText.Text = message;

            // Reiniciar timers y progreso
            progressValue = 0;
            AutoCloseProgress.Value = 0;

            autoCloseTimer.Stop();
            progressTimer.Stop();

            autoCloseTimer.Start();
            progressTimer.Start();
        }

        private async void AutoCloseTimer_Tick(object sender, EventArgs e)
        {
            autoCloseTimer.Stop();
            progressTimer.Stop();

            var storyboard = (Storyboard)FindResource("FadeOut");
            storyboard.Completed += (s, _) => Close();
            storyboard.Begin(this);
        }

        private void ProgressTimer_Tick(object sender, EventArgs e)
        {
            progressValue += (PROGRESS_UPDATE_INTERVAL / (AUTO_CLOSE_SECONDS * 1000.0)) * 100;
            AutoCloseProgress.Value = progressValue;

            if (progressValue >= 100)
            {
                progressTimer.Stop();
            }
        }

        private void CloseButton_Click(object sender, RoutedEventArgs e)
        {
            autoCloseTimer.Stop();
            progressTimer.Stop();
            var storyboard = (Storyboard)FindResource("FadeOut");
            storyboard.Completed += (s, _) => Close();
            storyboard.Begin(this);
        }

        protected override void OnMouseEnter(System.Windows.Input.MouseEventArgs e)
        {
            base.OnMouseEnter(e);
            autoCloseTimer.Stop();
            progressTimer.Stop();
        }

        protected override void OnMouseLeave(System.Windows.Input.MouseEventArgs e)
        {
            base.OnMouseLeave(e);
            autoCloseTimer.Start();
            progressTimer.Start();
        }
    }
}