package com.ruoyi.credit.service;

import java.util.List;
import java.util.Map;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.credit.domain.EmployeeLibrary;
import com.ruoyi.credit.domain.EmployeeInfo;

/**
 * 员工管理服务接口
 * 
 * @author ruoyi
 * @date 2025-12-22
 */
public interface IEmployeeManagerService
{
    // ==================== 员工库管理 ====================
    
    /**
     * 为安保公司创建员工库
     * 
     * @param companyId 公司ID
     * @param libraryName 员工库名称
     * @param description 描述
     * @return 员工库
     */
    public EmployeeLibrary createEmployeeLibrary(Long companyId, String libraryName, String description);

    /**
     * 查询员工库
     * 
     * @param libraryId 员工库ID
     * @return 员工库
     */
    public EmployeeLibrary selectEmployeeLibraryByLibraryId(Long libraryId);

    /**
     * 根据公司ID查询员工库
     * 
     * @param companyId 公司ID
     * @return 员工库
     */
    public EmployeeLibrary selectEmployeeLibraryByCompanyId(Long companyId);

    /**
     * 查询员工库列表
     * 
     * @param employeeLibrary 员工库
     * @return 员工库集合
     */
    public List<EmployeeLibrary> selectEmployeeLibraryList(EmployeeLibrary employeeLibrary);

    /**
     * 修改员工库
     * 
     * @param employeeLibrary 员工库
     * @return 结果
     */
    public int updateEmployeeLibrary(EmployeeLibrary employeeLibrary);

    /**
     * 删除员工库
     * 
     * @param libraryId 员工库ID
     * @return 结果
     */
    public int deleteEmployeeLibraryByLibraryId(Long libraryId);

    // ==================== 员工信息管理 ====================

    /**
     * 批量导入ERP格式的员工数据
     * 
     * @param file ERP文件
     * @param libraryId 员工库ID
     * @param format 文件格式
     * @return 导入结果
     */
    public Map<String, Object> importEmployeesFromERP(MultipartFile file, Long libraryId, String format);

    /**
     * 创建员工信息，支持多种薪资单位
     * 
     * @param employeeInfo 员工信息
     * @return 结果
     */
    public int createEmployee(EmployeeInfo employeeInfo);

    /**
     * 查询员工信息
     * 
     * @param employeeId 员工ID
     * @return 员工信息
     */
    public EmployeeInfo selectEmployeeInfoByEmployeeId(Long employeeId);

    /**
     * 根据员工库ID查询员工信息列表
     * 
     * @param libraryId 员工库ID
     * @return 员工信息集合
     */
    public List<EmployeeInfo> selectEmployeeInfosByLibraryId(Long libraryId);

    /**
     * 根据岗位查询员工信息列表
     * 
     * @param position 岗位
     * @return 员工信息集合
     */
    public List<EmployeeInfo> selectEmployeeInfosByPosition(String position);

    /**
     * 查询员工信息列表
     * 
     * @param employeeInfo 员工信息
     * @return 员工信息集合
     */
    public List<EmployeeInfo> selectEmployeeInfoList(EmployeeInfo employeeInfo);

    /**
     * 修改员工信息
     * 
     * @param employeeInfo 员工信息
     * @return 结果
     */
    public int updateEmployeeInfo(EmployeeInfo employeeInfo);

    /**
     * 删除员工信息
     * 
     * @param employeeId 员工ID
     * @return 结果
     */
    public int deleteEmployeeInfoByEmployeeId(Long employeeId);

    /**
     * 添加临时员工，可选同步到员工库
     * 
     * @param employeeInfo 员工信息
     * @param syncToLibrary 是否同步到员工库
     * @return 结果
     */
    public int addTemporaryEmployee(EmployeeInfo employeeInfo, boolean syncToLibrary);

    // ==================== 员工批量操作 ====================

    /**
     * 批量修改员工信息
     * 
     * @param employeeIds 员工ID列表
     * @param updateFields 要更新的字段和值
     * @return 成功修改的数量
     */
    public int batchUpdateEmployees(List<Long> employeeIds, Map<String, Object> updateFields);

    /**
     * 批量删除员工信息
     * 
     * @param employeeIds 员工ID列表
     * @return 成功删除的数量
     */
    public int batchDeleteEmployees(List<Long> employeeIds);

    /**
     * 批量转移员工到其他员工库
     * 
     * @param employeeIds 员工ID列表
     * @param targetLibraryId 目标员工库ID
     * @return 成功转移的数量
     */
    public int batchTransferEmployees(List<Long> employeeIds, Long targetLibraryId);

    // ==================== OCR和数据提取 ====================

    /**
     * 通过OCR提取员工相关信息
     * 
     * @param contractFile 合同文件
     * @return 提取的员工信息
     */
    public Map<String, Object> extractEmployeeInfoFromOCR(MultipartFile contractFile);

    // ==================== 数据验证 ====================

    /**
     * 验证员工数据完整性
     * 
     * @param employeeData 员工数据
     * @return 验证结果
     */
    public Map<String, Object> validateEmployeeData(Map<String, Object> employeeData);

    /**
     * 生成员工工号
     * 
     * @param libraryId 员工库ID
     * @return 员工工号
     */
    public String generateEmployeeNumber(Long libraryId);
}