#include "frame/FrameFactory.h"
#include "frame/Frame.h"
#include "frame/SetTimeRequestFrame.h"
#include "frame/SetTimeResponseFrame.h"

FrameFactory *FrameFactory::m_pInstance = nullptr;
std::mutex FrameFactory::m_mutex;


// typeId: 设备类型Id
// id : 通道id
Frame *FrameFactory::createFrame(int cmd, int direct)
{
    Frame *frame = nullptr;
    if(m_pInstance)
    {
        switch (FRAME_TYPE(direct, cmd))
        {
        case FRAME_TYPE_SET_TIME_REQ:
            frame = new SetTimeRequestFrame();
            break;

        case FRAME_TYPE_SET_TIME_RSP:
            frame  = new SetTimeResponseFrame();
            break;

        case FRAME_TYPE_GET_TIME_REQ:
        case FRAME_TYPE_GET_TIME_RSP:
        case FRAME_TYPE_SET_SERIAL_NUMBER_REQ:
        case FRAME_TYPE_SET_SERIAL_NUMBER_RSP:
        case FRAME_TYPE_GET_SERIAL_NUMBER_REQ:
        case FRAME_TYPE_GET_SERIAL_NUMBER_RSP:
        case FRAME_TYPE_SET_DEVICE_NAME_REQ:
        case FRAME_TYPE_SET_DEVICE_NAME_RSP:
        case FRAME_TYPE_GET_DEVICE_NAME_REQ:
        case FRAME_TYPE_GET_DEVICE_NAME_RSP:
        case FRAME_TYPE_SET_DEVICE_NUMBER_REQ:
        case FRAME_TYPE_SET_DEVICE_NUMBER_RSP:
        case FRAME_TYPE_GET_DEVICE_NUMBER_REQ:
        case FRAME_TYPE_GET_DEVICE_NUMBER_RSP:
        case FRAME_TYPE_SET_LOCK_STATUS_REQ:
        case FRAME_TYPE_SET_LOCK_STATUS_RSP:
        case FRAME_TYPE_SET_PASSWORD_REQ:
        case FRAME_TYPE_SET_PASSWORD_RSP:
        case FRAME_TYPE_SET_USAGE_COUNT_REQ:
        case FRAME_TYPE_SET_USAGE_COUNT_RSP:
        case FRAME_TYPE_GET_RECORD_REQ:
        case FRAME_TYPE_GET_RECORD_RSP:
        case FRAME_TYPE_SET_PARAM_REQ:
        case FRAME_TYPE_SET_PARAM_RSP:
            break;

        default:
            break;
        }
    }
    return frame;
}