package com.cyl.manager.staff.service;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cyl.h5.pojo.dto.H5LoginDTO;
import com.cyl.h5.pojo.dto.TrainCheckAnswerDTO;
import com.cyl.h5.pojo.request.*;
import com.cyl.h5.pojo.response.H5LoginResponse;
import com.cyl.h5.pojo.vo.StaffAnswerRecordVO;
import com.cyl.manager.staff.domain.StaffAnswerRecord;
import com.cyl.manager.staff.domain.vo.StaffVO;
import com.cyl.manager.staff.domain.Staff;
import org.springframework.http.ResponseEntity;

/**
 * 人员信息Service接口
 * 
 * @author ruoyi
 * @date 2023-12-26
 */
public interface IStaffService extends IService<Staff>
{
    /**
     * 查询人员信息
     * 
     * @param id 人员信息主键
     * @return 人员信息
     */
    public Staff selectStaffById(Long id);

    /**
     * 查询人员信息列表
     * 
     * @param staff 人员信息
     * @return 人员信息集合
     */
    public List<Staff> selectStaffList(Staff staff);

    /**
     * 新增人员信息
     * 
     * @param staff 人员信息
     * @return 结果
     */
    public int insertStaff(Staff staff);

    /**
     * 修改人员信息
     * 
     * @param staff 人员信息
     * @return 结果
     */
    public int updateStaff(Staff staff);

    /**
     * 批量删除人员信息
     * 
     * @param ids 需要删除的人员信息主键集合
     * @return 结果
     */
    public int deleteStaffByIds(Long[] ids);

    /**
     * 删除人员信息信息
     * 
     * @param id 人员信息主键
     * @return 结果
     */
    public int deleteStaffById(Long id);

    /**
     * 查询人员信息
     *
     * @param id 人员信息主键
     * @return 人员信息
     */
    public StaffVO selectStaffByIdForFront(Long id);

    /**
     * 查询人员信息列表（For小程序）
     *
     * @param staff 人员信息
     * @return 人员信息集合
     */
    public List<StaffVO> selectStaffListForFont(Staff staff);

    /**
     * 查询人员信息列表（For下单选择伴宠师）
     *
     * @param staff 人员信息
     * @return 人员信息集合
     */
    public List<StaffVO> selectStaffListByCondition(Staff staff);




    /**
     * 微信登录
     * @param params
     * @return
     */
    H5LoginResponse wechatLogin(H5LoginDTO params);

    //创建或更新员工信息
    Staff createOrUpdateStaff(String openId,String mobile, String wechatId);

    /**
     * 获取登录信息
     * @param memberId
     * @return
     */
    H5LoginResponse getLoginResponse(Long memberId);

    /**
     * 登录和注册
     * @param code
     * @param openId
     * @return
     */
    Staff getPhoneAndRegister(String code, String openId);

    /**
     * 加入合伙人
     * @return
     */
    boolean joinPartner();

    /**
     * 获取我的页面信息
     * @return
     */
    StaffVO getH5StaffInfo();

    /**
     * 保存喂养员认证基本信息
     * @param request
     * @return
     */
    boolean saveBaseInfo(StaffAuthenticateBaseInfoRequest request);

    /**
     * 保存基础考核答题结果
     * @param request
     * @return
     */
    boolean submitBasicCheckResult(BasicCheckResultRequest request);


    /**
     * 获取基础考核题目和答案
     * @return
     */
    JSON getBasicQuestion();


    /**
     * 获取培训考核题目和答案
     * @return
     */
    JSON getTrainQuestion();

    /**
     * 获取培训考核题目和答案
     * @param request
     * @return
     */
    boolean submitTrainCheckAnswer(TrainCheckAnswerRequest request);

    /**
     * 根据员工id获取答题记录
     * @return
     */
    StaffAnswerRecordVO getTrainAnswerRecord(Long staffId);

    /**
     * 更新员工保证金缴纳余额
     * @param staffId
     * @param money
     * @param type 缴纳类型 0 扣减 1 缴纳
     * @return
     */
    boolean updateStaffBondMoney(Long staffId, BigDecimal money,Integer type);

    /**
     * 完善宠物服务信息
     * @param request
     * @return
     */
    boolean completeServiceInfo(StaffServiceInfoRequest request);

    /**
     * 修改接单状态
     * @param request
     * @return
     */
    boolean changeReceiveOrderStatus(StaffChangeReceiveOrderStatusRequest request);

    /**
     * 点赞
     * @param request
     * @return
     */
    boolean star(StaffStarRequest request);

    /**
     * 是否完成接单信息填写校验
     * @param validBaseInfo
     * @param validAddressInfo
     */
    void serviceInfoSubmitted(Long staffId, boolean validBaseInfo, boolean validAddressInfo);
}
