#ifndef MODULE_META_DATE_CHANGED_H
#define MODULE_META_DATE_CHANGED_H
#include"module_singleton_base.h"
#include"websocket/sio/sio_client.h"

struct card_location_base;
struct area;


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(const std::shared_ptr<card_location_base> &card_ptr);

private:
    /*
     * 修改车及卡的数据
     * id64 = ;员工ID或者车ID;卡ID=101;0010000001198  分号间隔
     */
    void deal_call_edit_vehicle_or_staff(const std::string & id64, EDIT_TYPE_ID edit_type_id);

    ///id64格式为10000006666
    void deal_call_edit_card(std::string & id64, EDIT_TYPE_ID edit_type_id);

    void deal_call_edit_reader(const std::string & areaids, 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(const std::string & 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 deal_call_edit_forbid_person_down_mine(const std::string & lszId,EDIT_TYPE_ID edit_type_id);
	//地标
	void deal_call_edit_landmark(const std::string & landmarkid, EDIT_TYPE_ID edit_type_id);

    // 设置区域中时间段人员超员阈值等数据
    void deal_call_edit_persons_dynamic_thre(int area_id,EDIT_TYPE_ID edit_type_id);

    ///待实现
    void init_setting();

    void remove_card(uint32_t id, int32_t type);
    void remove_card(std::shared_ptr<card_location_base> card_ptr);

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

    //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