package com.pz.merchant.service;

import com.pz.merchant.domain.Employees;
import com.pz.merchant.domain.bo.EmployeesListBo;
import com.pz.merchant.domain.bo.OrderBo;
import com.pz.merchant.domain.bo.SetEmployeeWorkingHourBo;
import com.pz.merchant.domain.vo.EmployeesListVo;
import com.pz.merchant.domain.vo.EmployeesVo;
import com.pz.merchant.domain.bo.EmployeesBo;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery;
import com.pz.merchant.domain.vo.OrderInfoVO;
import com.pz.merchant.domain.vo.TodayOrderListVo;
import com.pz.system.domain.bo.EmployeesCompanyBo;
import com.pz.system.domain.bo.WithdrawDepositBo;

import java.util.Collection;
import java.util.List;

/**
 * 陪诊员Service接口
 *
 * @author WangMin
 * @date 2023-09-11
 */
public interface IEmployeesService {

    /**
     * 查询陪诊员
     */
    EmployeesVo queryById(Integer id);

    /**
     * 查询陪诊员列表
     */
    TableDataInfo<EmployeesVo> queryPageList(EmployeesBo bo, PageQuery pageQuery);

    /**
     * 查询陪诊员列表
     */
    TableDataInfo<EmployeesListVo> employeesList(EmployeesListBo bo, PageQuery pageQuery);

    /**
     * 查询陪诊员列表
     */
    List<EmployeesVo> queryList(EmployeesBo bo);

    /**
     * 新增陪诊员
     */
    Boolean insertByBo(EmployeesBo bo);

    /**
     * 新增陪诊员/商户
     * @param bo
     * @return
     */
    Boolean insertByEmployeesCompanyBo(EmployeesCompanyBo bo);

    /**
     * 修改陪诊员
     */
    Boolean updateByBo(EmployeesBo bo);

    /**
     * 校验并批量删除陪诊员信息
     */
    Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);

    /**
     * 设置员工工作时段
     */
    boolean setEmployeesWorkHours(SetEmployeeWorkingHourBo bo);

    /**
     * 查询员工信息
     *
     * @param emId 员工ID
     * @return 员工统计信息
     */
    TodayOrderListVo queryEmployeesInfo(Integer emId);

    /**
     * 查询所有订单
     *
     * @param bo 查询条件
     * @return 订单列表
     */
    TableDataInfo<OrderInfoVO> queryAllOrder(OrderBo bo, PageQuery pageQuery);

    /**
     * 排行榜
     */
    TableDataInfo<EmployeesVo> queryPageAppRanking(EmployeesBo bo, PageQuery pageQuery);

    /**
     * 需求广场
     */
    TableDataInfo<EmployeesVo> queryPageAppNeed(EmployeesBo bo, PageQuery pageQuery);

    /**
     * 查询陪诊员
     */
    EmployeesVo queryByApp(Integer id);

    /**
     * 切换陪诊员身份
     *
     * @param emId 陪诊员Id
     * @return 操作结果
     */
    boolean switchEmployeeIdentity(Integer emId);

    /**
     * 冻结/解冻陪诊员
     *
     * @param emId 陪诊员Id
     * @return 操作结果
     */
    boolean disableOrRecover(Integer emId);

    /**
     * 根据用户id获取陪诊员信息
     * @param userId
     * @return
     */
    EmployeesVo queryByUserId(Long userId);


    /**
     * 提现
     *
     * @param bo 提现数据
     * @return 操作结果
     */
    boolean withdrawDeposit(WithdrawDepositBo bo);

}