#ifndef __PSHAG_CIOWIN_HPP__
#define __PSHAG_CIOWIN_HPP__

#include <string>
#include <memory>

namespace urde
{
class CArchitectureMessage;
class CArchitectureQueue;

class CIOWin
{
    std::string m_name;
    size_t m_nameHash;
public:
    enum class EMessageReturn
    {
        Normal = 0,
        Exit = 1,
        RemoveIOWinAndExit = 2,
        RemoveIOWin = 3
    };
    virtual ~CIOWin() {}
    CIOWin(const char* name) : m_name(name) {m_nameHash = std::hash<std::string>()(m_name);}
    virtual EMessageReturn OnMessage(const CArchitectureMessage&, CArchitectureQueue&)=0;
    virtual bool GetIsContinueDraw() const {return true;}
    virtual void Draw() const {}
    virtual void PreDraw() const {}
    const std::string& GetName() const {return m_name;}
    size_t GetNameHash() const {return m_nameHash;}
};

static bool operator==(std::shared_ptr<CIOWin> a, std::shared_ptr<CIOWin> b)
{
    return a.get() == b.get();
}

}

#endif // __PSHAG_CIOWIN_HPP__