#pragma once

#include "ITrackpadGesture.hpp"

#include "../../../../desktop/DesktopTypes.hpp"

class CSpecialWorkspaceGesture : public ITrackpadGesture {
  public:
    CSpecialWorkspaceGesture(const std::string& workspaceName);
    virtual ~CSpecialWorkspaceGesture() = default;

    virtual void begin(const ITrackpadGesture::STrackpadGestureBegin& e);
    virtual void update(const ITrackpadGesture::STrackpadGestureUpdate& e);
    virtual void end(const ITrackpadGesture::STrackpadGestureEnd& e);

  private:
    std::string   m_specialWorkspaceName;
    PHLWORKSPACE  m_specialWorkspace;
    PHLMONITORREF m_monitor;
    bool          m_animatingOut = false;
    float         m_lastDelta    = 0.F;

    // animated properties, kinda sucks
    float    m_monitorFadeFrom = 0.F, m_monitorFadeTo = 0.F;
    float    m_monitorDimFrom = 0.F, m_monitorDimTo = 0.F;
    float    m_monitorBlurFrom = 0.F, m_monitorBlurTo = 0.F;
    float    m_workspaceAlphaFrom = 0.F, m_workspaceAlphaTo = 0.F;
    Vector2D m_workspaceOffsetFrom = {}, m_workspaceOffsetTo = {};
};
