package com.ruoyi.info.collection.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoAddDTO;
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoEditDTO;
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoQueryDTO;
import com.ruoyi.info.collection.domain.excel.CcdiAccountInfoExcel;
import com.ruoyi.info.collection.domain.vo.AccountInfoImportFailureVO;
import com.ruoyi.info.collection.domain.vo.CcdiAccountInfoVO;
import com.ruoyi.info.collection.domain.vo.CcdiAccountRelationOptionVO;
import com.ruoyi.info.collection.domain.vo.ImportResult;

import java.util.List;

/**
 * 账户库服务层
 *
 * @author ruoyi
 * @date 2026-04-13
 */
public interface ICcdiAccountInfoService {

    /**
     * 分页查询账户库
     *
     * @param page 分页对象
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    Page<CcdiAccountInfoVO> selectAccountInfoPage(Page<CcdiAccountInfoVO> page, CcdiAccountInfoQueryDTO queryDTO);

    /**
     * 查询账户库详情
     *
     * @param id 主键ID
     * @return 账户库详情
     */
    CcdiAccountInfoVO selectAccountInfoById(Long id);

    /**
     * 新增账户
     *
     * @param addDTO 新增DTO
     * @return 影响行数
     */
    int insertAccountInfo(CcdiAccountInfoAddDTO addDTO);

    /**
     * 修改账户
     *
     * @param editDTO 编辑DTO
     * @return 影响行数
     */
    int updateAccountInfo(CcdiAccountInfoEditDTO editDTO);

    /**
     * 批量删除账户
     *
     * @param ids 主键ID数组
     * @return 影响行数
     */
    int deleteAccountInfoByIds(Long[] ids);

    /**
     * 查询关系人下拉
     *
     * @param staffId 员工工号
     * @return 下拉列表
     */
    List<CcdiAccountRelationOptionVO> selectRelationOptionsByStaffId(Long staffId);

    /**
     * 导出账户库列表
     *
     * @param queryDTO 查询条件
     * @return 导出列表
     */
    List<CcdiAccountInfoExcel> selectAccountInfoListForExport(CcdiAccountInfoQueryDTO queryDTO);

    /**
     * 导入账户库信息
     *
     * @param excelList Excel数据
     * @param updateSupport 是否更新已存在账户
     * @return 导入结果
     */
    ImportResult importAccountInfo(List<CcdiAccountInfoExcel> excelList, boolean updateSupport);

    /**
     * 获取导入失败记录
     *
     * @return 失败记录
     */
    List<AccountInfoImportFailureVO> getLatestImportFailures();
}
