package com.hotwj.platform.driverManagement.driver.service;

import com.hotwj.platform.driverManagement.driver.domain.bo.DriverRegisterBo;
import com.hotwj.platform.driverManagement.driver.domain.bo.HotDriverBatchBindVehicleBo;
import com.hotwj.platform.driverManagement.driver.domain.bo.HotDriverBo;
import com.hotwj.platform.driverManagement.driver.domain.bo.HotDriverSwitchVehicleBo;
import com.hotwj.platform.driverManagement.driver.domain.vo.HotDriverImportVo;
import com.hotwj.platform.driverManagement.driver.domain.vo.HotDriverVo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;

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

/**
 * 驾驶员基本信息Service接口
 *
 * @author shihongwei
 * @date 2025-12-19
 */
public interface IHotDriverService {

    /**
     * 查询驾驶员基本信息
     *
     * @param id 主键
     * @return 驾驶员基本信息
     */
    HotDriverVo queryById(String id);

    /**
     * 分页查询驾驶员基本信息列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 驾驶员基本信息分页列表
     */
    TableDataInfo<HotDriverVo> queryPageList(HotDriverBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的驾驶员基本信息列表
     *
     * @param bo 查询条件
     * @return 驾驶员基本信息列表
     */
    List<HotDriverVo> queryList(HotDriverBo bo);

    /**
     * 新增驾驶员基本信息
     *
     * @param bo 驾驶员基本信息
     * @return 是否新增成功
     */
    Boolean insertByBo(HotDriverBo bo);

    /**
     * 修改驾驶员基本信息
     *
     * @param bo 驾驶员基本信息
     * @return 是否修改成功
     */
    Boolean updateByBo(HotDriverBo bo);

    /**
     * 批量绑定驾驶员车辆
     *
     * @param bo 绑定信息
     * @return 是否成功
     */
    Boolean batchBindVehicles(HotDriverBatchBindVehicleBo bo);

    /**
     * 追加批量绑定驾驶员车辆
     *
     * @param bo 绑定信息
     * @return 是否成功
     */
    Boolean appendBindVehicles(HotDriverBatchBindVehicleBo bo);

    /**
     * 解除驾驶员车辆绑定
     *
     * @param bo 解绑信息
     * @return 是否成功
     */
    Boolean unbindVehicles(HotDriverBatchBindVehicleBo bo);

    /**
     * 当前登录驾驶员切换默认车辆
     *
     * @param bo 切换信息
     * @return 是否成功
     */
    Boolean switchVehicle(HotDriverSwitchVehicleBo bo);

    /**
     * 审核驾驶员账号
     *
     * @param driverId    驾驶员ID
     * @param auditStatus 审核状态
     * @return 是否成功
     */
    Boolean auditDriver(String driverId, Integer auditStatus);

    /**
     * 导入驾驶员数据
     *
     * @param driverList 驾驶员数据列表
     * @param companyId  公司ID
     * @return 导入结果
     */
    String importData(List<HotDriverImportVo> driverList, Long companyId);

    /**
     * 校验并批量删除驾驶员基本信息信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 统计驾驶员准驾车型数量
     *
     * @param companyId 公司ID
     * @return 统计结果
     */
    java.util.List<com.hotwj.platform.driverManagement.driver.domain.vo.HotDriverCategoryStatVo> queryDriverCategoryStat(Long companyId);

    /**
     * 通过邀请码注册驾驶员
     *
     * @param bo 注册信息
     * @return 注册是否成功
     */
    Boolean registerByInviteCode(DriverRegisterBo bo);

    /**
     * 更新驾驶员存照
     *
     * @param businessUserId
     * @param ossId
     * @return
     */
    boolean updateUserFaceInitialOssId(String businessUserId, Long ossId);

    /**
     * 企业负责人修改驾驶员登录密码
     *
     * @param driverId 驾驶员ID
     * @param newPassword 新密码
     * @return 是否成功
     */
    Boolean updatePassword(String driverId, String newPassword);
}
