package com.yuchen.saas.park.service.service.pldoor;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuchen.saas.park.api.dto.pldoor.PlVisitorInfoDTO;
import com.yuchen.saas.park.api.entity.pldoor.PlVisitorInfo;
import com.yuchen.saas.park.api.vo.pldoor.*;
import com.yuchen.saas.park.api.vo.request.PlMyVisitorReq;
import com.yuchen.saas.park.api.vo.request.PlVisitorInfoReq;

import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;

/**
 * <p>
 * 保利访客信息表 服务类
 * </p>
 *
 * @author miaoqs
 * @since 2024-04-18
 */
public interface PlVisitorInfoService extends IService<PlVisitorInfo> {

    /**
     * 新增或修改
     * @param plVisitorInfoDTO
     * @return
     */
    boolean saveOrUpdateByParam(PlVisitorInfoDTO plVisitorInfoDTO);

    /**
     * 详情
     * @param id
     * @return
     */
    PlVisitorInfoDTO detailById(Long id);

    /**
     * 删除
     * @param id
     * @return
     */
    boolean deleteById(Long id);

    /**
     * 分页 访客登记
     * @param page
     * @param req
     * @return
     */
    IPage<PlVisitorInfoVO> pageByParam(Page<PlVisitorInfoReq> page, PlVisitorInfoReq req);

    /**
     * 即将到访访客
     * @param page
     * @param req
     * @return
     */
    IPage<PlTodayWillVisitVO> pageByTodayWillVisitParam(Page<PlVisitorInfoReq> page, PlVisitorInfoReq req);

    /**
     * 今日预约情况
     * @return
     */
    PlTodayAppointmentInfoVO getTodayAppointmentInfo(Long parkId);

    /**
     * 访客登记-门禁权限手动下发
     * @param visitId
     * @return
     */
    boolean sendVisitorPower(Long visitId);

    /**
     * 我的预约 分页
     * @param page
     * @param req
     * @return
     */
    IPage<PlVisitorInfoVO> pageByMyVistorAppointment(Page<PlMyVisitorReq> page, PlMyVisitorReq req);

    /**
     * 访客数量统计-1:人数;2:预约
     * @return
     */
    PlVistorStatisticsVO getQuantityStatistics(Long parkId, String statisticesType);

    /**
     * 统计分析-到访人数统计(年、月、日)
     * @param parkId
     * @param dateType
     * @return
     */
    PlVistorUserNumStatisticsVO getVisitorNumStatistics(Long parkId, String dateType);

    /**
     * 统计分析-到访时段统计(年、月、日)
     * @param parkId
     * @param dateType
     * @return
     */
    PlVistorUserNumStatisticsVO getVisitorHourStatistics(Long parkId, String dateType);

    /**
     * 获取访客权限二维码
     * @param visitorId
     * @return
     */
    String getVisitorQrcode(Long visitorId) throws UnsupportedEncodingException;

    /**
     * 导出
     * @param req
     * @param response
     */
    void exportVisitor(PlVisitorInfoReq req, HttpServletResponse response);

    /**
     * 根据parkId和车牌号查找被访者信息
     * @param parkId
     * @param carNo
     * @return
     */
    PlIntervieweeVO getVisitorByParkIdCarNo(Long parkId, String carNo);

    /**
     * 仅移除人脸和二维码权限
     * @param id
     * @return
     */
    boolean removeFaceById(Long id);
}
