#ifndef MODULE_META_DATE_CHANGED_H
#define MODULE_META_DATE_CHANGED_H
/**
 * @brief 简要说明
 * @author 戴月腾
 * @date 2018-10-18
 */

#include"module_singleton_base.h"
#include"websocket/sio/sio_client.h"
#include"card.h"
#include"area.h"


enum EDIT_TYPE_ID
{
    ET_INSERT = 0, // 新增
    ET_UPDATE,	   // 修改
    ET_DELETE      // 删除
};

class module_meta_date_changed:public singleton_base<module_meta_date_changed>
{
private:
    friend class singleton_base<module_meta_date_changed>;
    module_meta_date_changed()
    {
    }

    ///已经实现的：'card', 'staff', 'vehicle', 'vehicle_extend', 'staff_extend', 'area', 'reader',
    /// map antenna  path
    ///提供了接口未实现的： setting  light  lights_group
    ///下面的是暂时不要处理的
    ///'drivingface', 'drivingface_render', 'dat_drivingface_warning_point',
    ///'rules', 'drivingface_vehicle', 'dat_handup_vehicle', 'lights_binding'
public:
    ///基础数据
    void accept(sio::message::ptr const& data);

    ///3.清除卡相关信息，区域相关，分站相关，考勤相关，清除定时器，
    ///速度，状态 呼救 呼叫 告警相关。即保留基础信息，其他的重置。
    static void clear_card(std::shared_ptr<card_location_base> card_ptr);

private:
    ///id64格式为：10000001016
    void deal_call_edit_vehicle(int64_t id64, EDIT_TYPE_ID edit_type_id);

    ///id64格式为：10000001016
    void deal_call_edit_staff(int64_t id64, EDIT_TYPE_ID edit_type_id);

    ///id64格式为10000006666
    void deal_call_edit_card(int64_t id64, EDIT_TYPE_ID edit_type_id);

    void deal_call_edit_reader(int id, EDIT_TYPE_ID edit_type_id);

    ///待实现
    void deal_call_edit_path(int id, EDIT_TYPE_ID edit_type_id);

    void deal_call_edit_antenna(int id,EDIT_TYPE_ID edit_type_id);

    void deal_call_edit_area(int id, EDIT_TYPE_ID edit_type_id);

    void deal_call_edit_map(int id, EDIT_TYPE_ID edit_type_id);

    ///待实现
    void deal_call_edit_light(int id,EDIT_TYPE_ID edit_type_id);

    ///待实现
    void deal_call_edit_lights_group(int id,EDIT_TYPE_ID edit_type_id);

    ///待实现
    void init_setting();

    void remove_card(uint32_t id, int32_t type);

    bool try_get_edit_type_id(const std::string& op_type, EDIT_TYPE_ID& out_edit_type_id);

    bool is_monkeycar_area(int area_id);

    ///删除区域所有报警信息
    static void delete_area_event(std::shared_ptr<area> area_ptr);

    void delete_antenna(int id);

    bool is_cur_map(int id);

    int cur_map_id();

    void update_map_info(int id);

};

#endif // MODULE_META_DATE_CHANGED_H
