package com.ruoyi.info.collection.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffAddDTO;
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffEditDTO;
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffQueryDTO;
import com.ruoyi.info.collection.domain.excel.CcdiBaseStaffAssetInfoExcel;
import com.ruoyi.info.collection.domain.excel.CcdiBaseStaffExcel;
import com.ruoyi.info.collection.domain.vo.BaseStaffImportSubmitResultVO;
import com.ruoyi.info.collection.domain.vo.CcdiBaseStaffOptionVO;
import com.ruoyi.info.collection.domain.vo.CcdiBaseStaffVO;

import java.util.List;

/**
 * 员工信息 服务层
 *
 * @author ruoyi
 * @date 2026-01-28
 */
public interface ICcdiBaseStaffService {

    /**
     * 查询员工列表
     *
     * @param queryDTO 查询条件
     * @return 员工VO集合
     */
    List<CcdiBaseStaffVO> selectBaseStaffList(CcdiBaseStaffQueryDTO queryDTO);

    /**
     * 分页查询员工列表
     *
     * @param page     分页对象
     * @param queryDTO 查询条件
     * @return 员工VO分页结果
     */
    Page<CcdiBaseStaffVO> selectBaseStaffPage(Page<CcdiBaseStaffVO> page, CcdiBaseStaffQueryDTO queryDTO);

    /**
     * 查询员工列表（用于导出）
     *
     * @param queryDTO 查询条件
     * @return 员工Excel实体集合
     */
    List<CcdiBaseStaffExcel> selectBaseStaffListForExport(CcdiBaseStaffQueryDTO queryDTO);

    /**
     * 查询员工详情
     *
     * @param staffId 员工ID
     * @return 员工VO
     */
    CcdiBaseStaffVO selectBaseStaffById(Long staffId);

    /**
     * 新增员工
     *
     * @param addDTO 新增DTO
     * @return 结果
     */
    int insertBaseStaff(CcdiBaseStaffAddDTO addDTO);

    /**
     * 修改员工
     *
     * @param editDTO 编辑DTO
     * @return 结果
     */
    int updateBaseStaff(CcdiBaseStaffEditDTO editDTO);

    /**
     * 批量删除员工
     *
     * @param staffIds 需要删除的员工ID
     * @return 结果
     */
    int deleteBaseStaffByIds(Long[] staffIds);

    /**
     * 导入员工数据
     *
     * @param excelList Excel实体列表
     * @return 结果
     */
    String importBaseStaff(List<CcdiBaseStaffExcel> excelList);

    /**
     * 导入员工信息和员工资产双Sheet数据
     *
     * @param staffList 员工信息Sheet
     * @param assetList 员工资产Sheet
     * @return 提交结果
     */
    BaseStaffImportSubmitResultVO importBaseStaffWithAssets(List<CcdiBaseStaffExcel> staffList,
                                                            List<CcdiBaseStaffAssetInfoExcel> assetList);

    /**
     * 查询员工下拉列表
     * 支持按员工ID或姓名模糊搜索，只返回在职员工
     *
     * @param query 搜索关键词(员工ID或姓名)
     * @return 员工选项列表
     */
    List<CcdiBaseStaffOptionVO> selectStaffOptions(String query);

}
