#ifndef MWGUI_TRADEWINDOW_H
#define MWGUI_TRADEWINDOW_H

#include "container.hpp"
#include "window_base.hpp"

#include "../mwworld/ptr.hpp"

namespace MyGUI
{
  class Gui;
  class Widget;
}

namespace MWGui
{
    class WindowManager;
}


namespace MWGui
{
    class TradeWindow : public ContainerBase, public WindowBase
    {
        public:
            TradeWindow(WindowManager& parWindowManager);

            void startTrade(MWWorld::Ptr actor);

            void sellToNpc(MWWorld::Ptr item, int count); ///< only used for adjusting the gold balance
            void buyFromNpc(MWWorld::Ptr item, int count); ///< only used for adjusting the gold balance

            bool npcAcceptsItem(MWWorld::Ptr item);

        protected:
            MyGUI::Button* mFilterAll;
            MyGUI::Button* mFilterWeapon;
            MyGUI::Button* mFilterApparel;
            MyGUI::Button* mFilterMagic;
            MyGUI::Button* mFilterMisc;

            MyGUI::Button* mIncreaseButton;
            MyGUI::Button* mDecreaseButton;
            MyGUI::TextBox* mTotalBalanceLabel;
            MyGUI::TextBox* mTotalBalance;

            MyGUI::Widget* mBottomPane;

            MyGUI::Button* mMaxSaleButton;
            MyGUI::Button* mCancelButton;
            MyGUI::Button* mOfferButton;
            MyGUI::TextBox* mPlayerGold;
            MyGUI::TextBox* mMerchantGold;

            int mCurrentBalance;

            void onWindowResize(MyGUI::Window* _sender);
            void onFilterChanged(MyGUI::Widget* _sender);
            void onOfferButtonClicked(MyGUI::Widget* _sender);
            void onCancelButtonClicked(MyGUI::Widget* _sender);

            // don't show items that the NPC has equipped in his trade-window.
            virtual bool ignoreEquippedItems() { return true; }
            virtual std::vector<MWWorld::Ptr> getEquippedItems();

            virtual bool isTrading() { return true; }
            virtual bool isTradeWindow() { return true; }

            virtual std::vector<MWWorld::Ptr> itemsToIgnore();

            void updateLabels();

            virtual void onReferenceUnavailable();
    };
}

#endif
