#ifndef MODULE_SITE_H
#define MODULE_SITE_H

#include"math.h"
#include <memory>
#include <mutex>
#include <map>
#include <string>
#include <chrono>
#include <vector>
#include<card.h>
#include"ant.h"
#include"area.h"
#include"site_area.h"
#include"module_const.h"
#include"module_attendance_person.h"

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

public:
    /**
     * @brief 进入分站覆盖区域处理,考勤
     * @param card_id
     * @param enter_site
     */
    static void enter_site(uint32_t card_id,int enter_site,int32_t type)
    {
        auto card_ptr=card_list::instance()->get(card_list::to_id64(type, card_id));
        if(!card_ptr)
        {
            log_error("卡不存在card_id=%ld, type=%ld", card_id, type);
            return;
        }

        auto site_ptr=sit_list::instance()->get(enter_site);
        if(!site_ptr)
        {
            log_error("[enter site]%d,%d在分站列表中找不到分站,分站id=%d",card_id, type,enter_site);
            return;
        }

        if(card_ptr->is_person())
        {
            module_attendance_person::instance()->enter_site(card_ptr, site_ptr);
        }

        if(card_ptr->is_vehicle())
        {

        }
    }

    /**
     * @brief 离开现有分站处理,记录现有分站的进出时间和地点
     * @param card_id
     * @param enter_site
     */
    static void leave_site(uint32_t card_id,int enter_site, int32_t type)
    {
        auto card_ptr=card_list::instance()->get(card_list::to_id64(type, card_id));
        if(!card_ptr)
        {
            log_error("卡不存在card_id=%ld, type=%ld", card_id, type);
            return;
        }

        auto site_ptr=sit_list::instance()->get(enter_site);
        if(!site_ptr)
        {
            log_error("[leave site]%d,%d在分站列表中找不到分站,分站id=%d",card_id,type, enter_site);
            return;
        }

        if(card_ptr->is_person())
        {

        }

        if(card_ptr->is_vehicle())
        {

        }
    }
};

#endif // MODULE_SITE_H