#pragma once

#include <onepiece/models/TickData.h>
#include <onepiece/models/OrderData.h>
#include <onepiece/models/TradeData.h>
#include <onepiece/models/StatusInfoFieldData.h>

#include <onepiece/templates/ICoreListener.h>

#include <iostream>
using namespace std;


class IPluginContext {

public:
    IPluginContext() = delete;

    explicit IPluginContext(ICoreListener* core): m_core(core), m_contextPos(0) {};
    
    virtual ~IPluginContext() { this->m_core = nullptr; };

    virtual void OnContextInit() = 0;

    virtual void OnContextWakeUpCall() = 0;

    virtual void OnTickUpdate(TickSPtr tickSPtr) = 0;

    virtual void setContextPos(int lots) { this->m_contextPos = lots; }

    virtual int ContextPos() { return this->m_contextPos; }


private:
    ICoreListener* m_core;

    int m_contextPos;

};