using Avalonia;
using Avalonia.Animation;
using Avalonia.Media;
using Avalonia.Styling;
using System;

namespace Harmonia.UI.Animations
{
    public static class Animations
    {
        public static Animation SlideIn(Point start, Point end, long duration = 200)
        {
            return new()
            {
                Duration = TimeSpan.FromMilliseconds(duration),
                Children =
                {
                    new KeyFrame
                    {
                        Cue = new Cue(0f),
                        Setters =
                        {
                            new Setter(Visual.OpacityProperty, 0.0),
                            new Setter(TranslateTransform.XProperty, start.X),
                            new Setter(TranslateTransform.YProperty, start.Y)
                        }
                    },
                    new KeyFrame
                    {
                        Cue = new Cue(1f),
                        Setters =
                        {
                            new Setter(Visual.OpacityProperty, 1.0),
                            new Setter(TranslateTransform.XProperty, end.X),
                            new Setter(TranslateTransform.YProperty, end.Y)
                        }
                    }
                }
            };
        }

        public static Animation SlideFromRight(double offSet, long duration = 200)
        {
            Point start = new(-offSet, 0);
            Point end = new(0, 0);

            return SlideIn(start, end, duration);
        }

        public static Animation SlideToRight(double offSet, long duration = 200)
        {
            Point start = new(0, 0);
            Point end = new(offSet, 0);

            return SlideIn(start, end, duration);
        }
    }
}