using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;

using Barotrauma;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Graphics;

namespace QICrabUI
{
  public class CUISwipeHandle : ICUIVitalizable
  {
    public void SetHost(CUIComponent host) => Host = host;
    public CUIComponent Host;
    public bool Grabbed;
    public bool Swipeable;
    public Vector2 PrevPosition;
    public CUIMouseEvent Trigger = CUIMouseEvent.Down;
    public bool ShouldStart(CUIInput input)
    {
      return Swipeable && (
        (Trigger == CUIMouseEvent.Down && input.MouseDown) ||
        (Trigger == CUIMouseEvent.DClick && input.DoubleClick)
      );
    }

    public void BeginSwipe(Vector2 cursorPos)
    {
      Grabbed = true;
      PrevPosition = cursorPos;
    }

    public void EndSwipe()
    {
      Grabbed = false;
      Host.MainComponent?.OnSwipeEnd(this);
    }

    public void Swipe(CUIInput input)
    {
      Host.CUIProps.ChildrenOffset.SetValue(
        Host.ChildrenOffset.Shift(
          input.MousePositionDif.X,
          input.MousePositionDif.Y
        )
      );
      Host.InvokeOnSwipe(input.MousePositionDif.X, input.MousePositionDif.Y);
    }
    public CUISwipeHandle() { }

    public CUISwipeHandle(CUIComponent host) => Host = host;
  }
}