#ifndef VST_AUTO_SCHEDULAR_H
#define VST_AUTO_SCHEDULAR_H
#include "vst_wait_base.h"
#include "ccritical_res_manager.h"
class VstAutoSchedular : public VST_Wait_Base
{
public:
    VstAutoSchedular(int iID, const QString& sName, VSM_Thread* pParent);
    virtual void do_Msg(const V_Msg& msg) override;
    void AddMsgToSM(int iSMId, const V_Msg& msg, bool bfront = false);
    void AddMsgToState(int iSvmId, int iTransMsgID, uint nAcqResId,
                       const QString& msgName = "", bool bfront = false);

    /*!
     * 处理转移夹抓
     *
     * \return false
     */
    bool ProcessTrans();
    /*!
     * 处理近轨道
     * 1.第一次进入处理，放到涂覆台，直接放到涂覆台，不在Rail2中转
     * 2.涂覆检查，放到检查盒
     * 3.涂覆检查完成，放到加工台，Attention:用下料手放到加工台
     * 4.清洗完成，检查切割，放到检查盒
     * 5.切割检查完成，放到料盒
     * 6.加工完成，去清洗
     * \return true 被处理 false 条件不满足，不处理
     */
    bool ProcessRailNear();

    bool ProcessRailNearOneRail();
    /*!
     * 处理远轨道
     * 1.涂覆完成，轨道暂存，放到加工台
     * 2.涂覆完成，需要检查，放到轨道1
     * \return
     */
    bool ProcessRailFar();
    /*!
     * 处理检查盒
     * 1.切割检查完成，放到料盒
     * 2.检查完成，放到轨道1
     * \return
     */
    bool ProcessCheckBox();

    bool ProcessCupboardManualCheck();
    /*!
     * 1.清洗完成放到轨道1
     *
     * \return
     */
    bool ProcessClean();
    /*!
     * 涂覆完成放到轨道2
     *
     * \return
     */
    bool ProcessCoat();
    bool ProcessCoatOneRail();
    /*!
     * 1.加工完成放到轨道1
     *
     * \return
     */
    bool ProcessWorktable();
    bool ProcessUnload();
    bool ProcessLoad();
    /*!
     * 1.需要加工，则取新的片子进行加工
     *
     * \return
     */
    bool ProcessCasste();
    bool ProcessCassteOneRail();
};

#endif // VST_AUTO_SCHEDULAR_H