#include "area_business_card_enter_or_leave.h"
#include "area.h"
#include "card_base.h"
#include"common_tool.h"
#include"tool_time.h"
#include"db/db_tool.h"
#include"log.h"


void area_business_card_enter_or_leave::on_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
{

}

//进入区域则入库操作
void area_business_card_enter_or_leave::on_enter(const std::shared_ptr<area_hover>&a,
                                                 const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
{
    char sql[LENGTH_SQL]{0};
    std::string start_time = tool_time::to_str(a->m_enter_time/1000);
    const auto &p=a->m_enter_point;
    snprintf(sql,LENGTH_SQL,"INSERT INTO his_location_area (obj_id,card_type_id,ident,area_id,map_id,enter_time,start_point) \
	                         VALUES ('%d','%lu','%d',%d,%d,'%s','%.2f,%.2f');",
				c->m_cid,c->m_type,c->m_id, a->id(),a->mapid(),start_time.c_str(),p.x,p.y);

    db_tool::PushAsync(sql);
}

void area_business_card_enter_or_leave::on_hover(const std::shared_ptr<area_hover>&a,
                                                 const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
{

}
//出区域则入库
void area_business_card_enter_or_leave::on_leave(const std::shared_ptr<area_hover>&a,
                                                 const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
{
    char sql[LENGTH_SQL]{0};
    std::string start_time = tool_time::to_str(a->m_enter_time/1000);
    std::string end_time = tool_time::to_str(a->m_last_time/1000);
//    std::string card_id = tool_other::type_id_to_str(c->m_type,c->m_id);
    const auto &ep=a->m_last_point;
    snprintf(sql,LENGTH_SQL,"UPDATE his_location_area SET leave_time='%s',end_point='%.2f,%.2f' \
	                         WHERE  enter_time='%s' AND obj_id=%d AND area_id=%d;",
                end_time.c_str(),ep.x,ep.y,
				start_time.c_str(),c->m_cid,a->id());

    log_info("card_enter_leave:%s",sql);
    db_tool::PushAsync(sql);
}