#include "module_meta_date_changed.h"
#include"module_attendance_person.h"
#include"module_attendance_vehicle.h"
#include"ant.h"


void module_meta_date_changed::deal_call_edit_vehicle(int id, EDIT_TYPE_ID edit_type_id)
{
    if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
    {
        card_list::instance()->init_vehicle(id);
    }
    else if(ET_DELETE == edit_type_id)
    {
        remove_card(static_cast<uint32_t>(id), CT_VEHICLE);
    }
}

void module_meta_date_changed::deal_call_edit_staff(int id, EDIT_TYPE_ID edit_type_id)
{
    if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
    {
        card_list::instance()->init_staffer(id);
    }
    else if(ET_DELETE == edit_type_id)
    {
        remove_card(static_cast<uint32_t>(id), CT_PERSON);
    }
}

void module_meta_date_changed::deal_call_edit_card(int id64, EDIT_TYPE_ID edit_type_id)
{
    std::string card_id64_str = tool_other::to13str(static_cast<uint64_t>(id64));
    int type = tool_other::id64_to_type(card_id64_str);
    int id = static_cast<int32_t>(tool_other::id64_to_id(card_id64_str));

    if(CT_PERSON==type)
    {
        deal_call_edit_staff(id, edit_type_id);
    }
    else if(CT_VEHICLE==type)
    {
        deal_call_edit_vehicle(id, edit_type_id);
    }
    else
    {
        log_error("基础数据 删除卡type不对:type=%d", type);
    }
}

void module_meta_date_changed::deal_call_edit_area(int id, EDIT_TYPE_ID edit_type_id)
{
    if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
    {
        if(is_monkeycar_area(id))
        {
            area_list::instance()->init_monkeycar_area(id);
        }
        else
        {
            area_list::instance()->init_from_db(id);
        }
    }
    else if(ET_DELETE == edit_type_id)
    {
        auto area_ptr = area_list::instance()->get(id);
        if(!area_ptr)
        {
            log_info("区域已经删除:areaid=%d", id);
            return;
        }
        //删除告警
        delete_area_event(area_ptr);
        area_list::instance()->remove(id);
    }
}

void module_meta_date_changed::deal_call_edit_reader(int id, EDIT_TYPE_ID edit_type_id)
{
    if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
    {
        sit_list::instance()->init_site(id);
    }
    else if(ET_DELETE == edit_type_id)
    {
        //删除告警

        sit_list::instance()->remove(id);
    }
}

void module_meta_date_changed::deal_call_edit_antenna(int id,EDIT_TYPE_ID edit_type_id)
{
    if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
    {
        sit_list::instance()->read_sit_list(id);
    }
    else if(ET_DELETE == edit_type_id)
    {
        delete_antenna(id);
    }
}

void module_meta_date_changed::deal_call_edit_path(int id, EDIT_TYPE_ID edit_type_id)
{
    if(ET_INSERT == edit_type_id)
    {
        log_error("path不支持增加操作");
        std_debug("path不支持增加操作");
    }
    else if(ET_UPDATE == edit_type_id)
    {
        sit_list::instance()->read_ant_path(id);
    }
    else if(ET_DELETE == edit_type_id)
    {
        auto sit_ptr = sit_list::instance()->get(id);
        if(sit_ptr)
        {
            sit_ptr->clear_path();
        }

        log_info("path删除成功,分站id=%d", id);
        std_debug("path删除成功,分站id=%d", id);
    }
}

void module_meta_date_changed::deal_call_edit_map(int id, EDIT_TYPE_ID edit_type_id)
{
    if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
    {
        if(!is_cur_map(id))
        {
            log_info("修改的不是当前使用的地图,要修改地图id=%d,当前使用地图id=%d", id, cur_map_id());
            return;
        }

        update_map_info(id);
    }
    else if(ET_DELETE == edit_type_id)
    {
        if(is_cur_map(id))
        {
            log_error("删除了当前使用的地图");
            return;
        }
    }
}

void module_meta_date_changed::deal_call_edit_light(int id, EDIT_TYPE_ID edit_type_id)
{
    if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
    {
    }
    else if(ET_DELETE == edit_type_id)
    {
    }
}

void module_meta_date_changed::deal_call_edit_lights_group(int id, EDIT_TYPE_ID edit_type_id)
{
    if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
    {
    }
    else if(ET_DELETE == edit_type_id)
    {
    }
}

void module_meta_date_changed::init_setting()
{
//pRes = getMysqlRes("select setting_id, name, type, value from dat_setting;");
}

void module_meta_date_changed::remove_card(uint32_t id, int32_t type)
{
    uint64_t card_id = card_list::to_id64(type, id);
    auto card_ptr = card_list::instance()->get(card_id);
    if(!card_ptr)
    {
        log_error("基础数据, 在全局列表中删除卡,全局列表中已经不存在此卡, id=%d, type=%d", id, type);
        return;
    }

    if(card_ptr->is_person())
    {
        module_attendance_person::up_mine(card_ptr, nullptr);
    }
    else
    {
        clear_card_vehicle(card_ptr);
    }

    // 避免状态重置
    card_list::instance()->remove(card_id);
    log_info("基础数据, 在全局列表中删除卡成功, id=%d, type=%d", id, type);
}

void module_meta_date_changed::clear_card_vehicle(std::shared_ptr<card_location_base> card_ptr)
{
    module_attendance_vehicle::save_attendance(card_ptr, nullptr);

    auto area_hover_ptr = card_ptr->get_area_hover();
    if(area_hover_ptr && 0!=area_hover_ptr->id() && 0!=area_hover_ptr->mapid())
    {
        module_area::save_his_area_location_leave(card_ptr);
    }

    module_meta_date_changed::clear_card(card_ptr);
}