package com.palmnest.service.estateserve;

import com.palmnest.application.bean.AppResultDto;
import com.palmnest.application.bean.Page;
import com.palmnest.application.dto.input.LingLingScanVisitorInfo;
import com.palmnest.application.dto.output.lingling.VisitorPassRecordVo;
import com.palmnest.model.estateserve.*;
import com.palmnest.service.GenericManager;

import javax.servlet.http.HttpServletRequest;

import java.util.List;
import java.util.Map;

/**
 * 访客模块 业务层
 *
 * @author HJY
 */
public interface VisitorInFoManager extends GenericManager<Object, Integer> {

	/**
	 * 新增访客
	 *
	 * @param tbVisitorInfo
	 * @param openId
	 * @return
	 */
	public Map<String, Object> saveVisitorInfo(List<VisitorInfo> tbVisitorInfo, String openId) throws Exception;


	/**
	 * PC访客登记
	 *
	 * @param tbVisitorInfo
	 * @param openId
	 * @return
	 */
	public Map<String, Object> savePCVisitorInfo(List<VisitorInfo> tbVisitorInfo, int virtualArchId, HttpServletRequest request) throws Exception;


	/**
	 * 微信分享新增访客
	 *
	 * @param tbVisitorInfo
	 * @param openId
	 * @return
	 */
	public Map<String, Object> saveWeiXinVisitorInfo(List<VisitorInfo> tbVisitorInfo, String openId) throws Exception;

	/**
	 * 根据主键ID查询访客详情
	 *
	 * @param visitorId
	 * @return
	 */
	public VisitorInfo getVisitorInfo(String visitorId);

	/**
	 * 编辑访客信息图片
	 *
	 * @param visitorId
	 * @return
	 */
	public Map<String, Object> updateVisitorInfo(String visitorId, String imageUrl, String updatImageUrl, String updateShowImageUrl, String updateImageFacePlusId);

	/**
	 * 根据订单ID 查询访客信息
	 *
	 * @param visitorOrderId
	 * @return
	 */
	public Map<String, Object> getVisitorInfoList(String visitorOrderId);

	/**
	 * 根据订单ID 查询访客信息
	 *
	 * @param visitorOrderId
	 * @return
	 */
	public List<VisitorInfo> getVisitorInfoList(Integer visitorOrderId);

	/**
	 * 审核访客来访申请
	 *
	 * @param visitorId
	 * @param visitorOrderStatus
	 */
	public String updateVisitorOrder(Integer visitorId, String visitorOrderStatus);

	/**
	 * 根据userId 查询员工的预约单记录
	 *
	 * @param userId
	 * @return
	 */
	public List<Map<String, Object>> getVisitorOrderList(String userId, String userType);

	/**
	 * 根据访客openId和标识查询 访客填写信息
	 *
	 * @param visitorOpenId
	 * @param visitorIdentification
	 * @return
	 */
	public VisitorInfo getVisitorInfo(String visitorOpenId, String visitorIdentification);

	/**
	 * 查询访客预约记录
	 *
	 * @param paramValue 搜索条件
	 * @param orgIdS     项目id
	 * @param pageNo     页码
	 * @return
	 */
	public Page getVisitorOrderInfoList(Map<String, String> params, String orgIdS, Integer pageNo);
	

	AppResultDto exportVisitorOrder(Map<String, String> params, String orgIdS);
	/**
	 * 根据用户ID查询 图片
	 *
	 * @param userId
	 * @return
	 */
	public List<UserImageInfo> getUserImageInfo(Integer userId, String type);

	/**
	 * 根据图片唯一ID查询 图片
	 *
	 * @param imageUrlId
	 * @return
	 */
	public UserImageInfo getUserImageInfoById(Integer imageUrlId);

	/**
	 * 保存临时访客用户信息
	 *
	 * @param visitorInfo
	 * @return
	 */
	public Map<String, Object> saveSubmitTemporayVisitor(VisitorInfo visitorInfo);

	/**
	 * 根据访客openId 检索最近提交信息
	 *
	 * @param visitorOpenId
	 * @return
	 */
	public VisitorInfo getVisItorInfo(String visitorOpenId);

	/**
	 * 根据项目或企业ID和类型查询相对应的授权账号信息
	 *
	 * @param projectId 项目或企业ID
	 * @param type      1-项目，2企业
	 * @return
	 */
	public FaceProjectInfo getFaceProjectInfo(Integer projectId, String type);


	public VisitorOrder getVisitorOrder(Integer visitorOrderId);

	/**
	 * 删除用户底库头像信息
	 *
	 * @param userId 用户ID
	 * @param type   类型 （1-员工，2-访客）
	 */
	public void deleteUserImageInfoByUserId(Integer userId, String type);

	/**
	 * 生成访客二维码
	 *
	 * @param organizationId
	 * @param visitorOrder   来访订单信息
	 * @return
	 */
	public String createVisitorQrCode(Integer organizationId, VisitorOrder visitorOrder);

	/**
	 * 删除访客二维码
	 *
	 * @return
	 */
	public String delVisitorQrCode(Integer visitorId, String visitorOrderStatus);

	/**
	 * 根据二维码查订单
	 *
	 * @param qrcodeKey
	 * @return
	 */
	public VisitorOrder getOrderByQrcodeKey(String qrcodeKey);
	
	/**
	 * 根据linglingId查订单
	 *
	 * @param linglingId
	 * @return
	 */
	public VisitorOrder getOrderByLingLingId(String linglingId);

	/**
	 * 访客自己在公众号发起的预约邀请
	 *
	 * @param list
	 * @param openId
	 * @param appUser 被访人信息
	 * @return
	 */
	Map<String, Object> saveVisInfo(List<VisitorInfo> list, String openId, AppUser appUser,Integer orgId) throws Exception;

	/**
	 * 根据手机号查询最后一条访客记录
	 *
	 * @param telephone
	 * @return
	 */
	VisitorInfo getLastVisitorInfoByMobile(String telephone);

	VisitorInfo getVisitorInfo(Integer visitorId);

	/**
	 * 根据访客二维码查询访客信息
	 *
	 * @param qrCode
	 * @return
	 */
	VisitorInfo getVisitorInfoByQrCode(String qrCode);


	Map<String, Object> scanUpdateVisitorInfo(LingLingScanVisitorInfo scanVisitorInfo, HttpServletRequest request);

	List<VisitorPassRecordVo> getVisitorPassInfo(Integer orderId,int type);
}
