#pragma once

#include <memory>

#include "DiscretePoint.h"
#include "UiEvent.h"

class MouseEvent : public UiEvent
{
public:
    enum class Action
    {
        Pressed,
        Released,
        Move,
        Enter,
        Leave
    };

public:

    MouseEvent();

    ~MouseEvent();

    static std::unique_ptr<MouseEvent> Create();

    Pixel getClientLocation() const;

    Pixel getScreenLocation() const;

    Action getAction() const;

    void setClientLocation(Pixel location);

    void setScreenLocation(Pixel location);

    void setAction(Action action);

private:
    Pixel mClientLocation;
    Pixel mScreenLocation;
    Action mAction;
};
using MouseEventUPtr = std::unique_ptr<MouseEvent>;
