#pragma once

// STL
#include <string>
#include <variant>

//
#include "DllDefines.h"

// ISGManager.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CSGManager document

/*************************************************************************************/
class ISGManagerObserver;

class SECSGEM_DLL ISGManager
{
public:
    virtual ~ISGManager()
    {
    }

    virtual bool        AcknowledgeRemoteCommand(const std::string& sRmtCmd, int iReturnVal)                                                                                                                                             = 0;
    virtual bool        AddRecipe(const std::string& strName, bool bRefreshRecipe = false)                                                                                                                                               = 0;
    virtual bool        ClearAllAlarms()                                                                                                                                                                                                 = 0;
    virtual bool        CloseSecsGemApplication()                                                                                                                                                                                        = 0;
    virtual bool        DeleteAllRecipe(bool bRefreshRecipe = false)                                                                                                                                                                     = 0;
    virtual bool        DeleteRecipe(const std::string& strName)                                                                                                                                                                         = 0;
    virtual bool        ConnectSocketSecsGem(bool bUpdateParameter = true)                                                                                                                                                               = 0;
    virtual void        DisableEventForAllMode()                                                                                                                                                                                         = 0;
    virtual bool        DisconnectSocketSecsGem()                                                                                                                                                                                        = 0;
    virtual bool        DisplayTerminalMsgDialog()                                                                                                                                                                                       = 0;
    virtual bool        DownloadData(const std::string& strName)                                                                                                                                                                         = 0;
    virtual bool        DownloadRecipe(const std::string& strName)                                                                                                                                                                       = 0;
    virtual bool        DownloadStripMap(const std::string& strName)                                                                                                                                                                     = 0;
    virtual bool        DownloadWaferMap(const std::string& sWMapID, int nType = 2, int nFormat = 1, int nFNLoc = 0, int nRotAngle = 0, int nOrgLoc = 0, const std::string& strBinCodeEq = "", const std::string& strNullBinCodeEq = "") = 0;
    virtual bool        EditRecipe(const std::string& strName)                                                                                                                                                                           = 0;
    virtual void        EnableEventForAllMode()                                                                                                                                                                                          = 0;
    virtual std::string GetLinkState()                                                                                                                                                                                                   = 0;
    virtual bool        GoLocal()                                                                                                                                                                                                        = 0;
    virtual bool        GoOffline()                                                                                                                                                                                                      = 0;
    virtual bool        GoOnLine()                                                                                                                                                                                                       = 0;
    virtual bool        GoRemote()                                                                                                                                                                                                       = 0;
    virtual bool        IsConnectWithSecsGem()                                                                                                                                                                                           = 0;
    virtual bool        IsEnableCommunicating()                                                                                                                                                                                          = 0;
    virtual bool        IsOnlineLocal()                                                                                                                                                                                                  = 0;
    virtual bool        IsOnlineRemote()                                                                                                                                                                                                 = 0;
    virtual bool        IsSpoolActive()                                                                                                                                                                                                  = 0;
    virtual bool        ResetData()                                                                                                                                                                                                      = 0;
    virtual bool        SecsGemDisableLink()                                                                                                                                                                                             = 0;
    virtual bool        SecsGemEnableLink()                                                                                                                                                                                              = 0;
    virtual bool        SendAlarmOff(UINT iAlarmID, const std::string& sAlarmText)                                                                                                                                                       = 0;
    virtual bool        SendAlarmOn(UINT iAlarmID, const std::string& sAlarmText)                                                                                                                                                        = 0;
    virtual void        SetEnableLogFile(bool bEnable = true)                                                                                                                                                                            = 0;
    virtual bool        SendEPTData(int nModuleID, const std::string& strTaskName, int nTaskType, int nEPTState, int nBlockedReson, const std::string& strBlockedReasonText)                                                             = 0;
    virtual bool        SendEvent(const std::string& strEventName)                                                                                                                                                                                 = 0;
    virtual bool        SendRecipeVerification(const std::string& strResultData)                                                                                                                                                         = 0;
    virtual void        SetLogLevel(const std::string& level)                                                                                                                                                                            = 0;
    virtual bool        SetMainMode(const std::string& sMode)                                                                                                                                                                            = 0;
    virtual bool        SetProcessState(const std::string& sProcessState)                                                                                                                                                                = 0;
    virtual void        SetSecsGemDataFileFolder(const std::string& strSGDataFileFolder)                                                                                                                                                 = 0;
    virtual bool        SetSecsGemIpAddressAndPort(ISGManagerObserver* pObserver, int iPort, const std::string& strIpAddress, bool bConnect = false, bool bUpdateParameter = true)                                                       = 0;
    virtual bool        SetUserLevel(const std::string& sUserLevel)                                                                                                                                                                      = 0;

    virtual bool SetVariableValue(const std::string& strVariableName, const std::variant<int, long, double, std::string>& value) = 0;

    virtual bool StartSecsGemApplication()                   = 0;
    virtual bool UpdateRecipeList()                          = 0;
    virtual bool UploadData(const std::string& strName)      = 0;
    virtual bool UploadRecipe(const std::string& strName)    = 0;
    virtual bool UploadWaferMap(const std::string& strName)  = 0;
    virtual bool SendMsgToSecsGem(const std::string& strStr) = 0;
    virtual void SetWinHandler(HWND hHandler)                = 0;
    virtual void NotifyHandlerToConnect()                    = 0;
};
