package com.engine.salary.service;

import com.engine.salary.entity.salaryBill.dto.SalaryTemplateListDTO;
import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO;
import com.engine.salary.entity.salaryBill.param.SalaryTemplateCopyParam;
import com.engine.salary.entity.salaryBill.param.SalaryTemplateDefaultUseParam;
import com.engine.salary.entity.salaryBill.param.SalaryTemplateQueryParam;
import com.engine.salary.entity.salaryBill.param.SalaryTemplateSaveParam;
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
import com.engine.salary.util.page.PageInfo;

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

/**
 * @Description: 工资单模板
 * @Author: wangxiangzhong
 * @Date: 2021-12-08 14:44
 */
public interface SalaryTemplateService {

    /**
     * 获取单个工资单模板记录
     *
     * @param id
     * @return
     */
    SalaryTemplatePO getById(Long id);

    /**
     * 工资单模板列表（分页）
     *
     * @param queryParam
     * @return
     */
//    Map<String, Object> listPage(SalaryTemplateQueryParam queryParam);

    /**
     * 默认使用
     *
     * @param defaultUseParamy
     * @return
     */
    String defaultUse(SalaryTemplateDefaultUseParam defaultUseParamy);

    /**
     * 新建工资单模板
     * 
     * @param saveParam
     * @return
     */
    String save(SalaryTemplateSaveParam saveParam);

     /**
      * 编辑工资单模板
      * 
      * @param saveParam
      * @return
      */
    String update(SalaryTemplateSaveParam saveParam);

    /**
     * 复制工资单模板
     * 
     * @param copyParam
     * @return
     */
    String copy(SalaryTemplateCopyParam copyParam);

     /**
      * 删除工资单模板
      * 
      * @param ids
      * @return
      */
    String delete(Collection<Long> ids);

    /**
     * 获取薪资账套下拉列表
     *
     * @return
     */
    List<Map<String, Object>> selectSalarySobList();

    /**
     * 获取薪资项目设置(不包含已隐藏的薪资项目、分类)
     *
     * @param salarySobId
     * @return
     */
    List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSet(Long salarySobId, boolean isReplenish);

    /**
     * 获取薪资项目设置(包含已隐藏的薪资项目、分类)
     *
     * @param salarySobId
     * @return
     */
    List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSetContainHide(Long salarySobId, Long salaryTemplateId, boolean isReplenish);

    /**
     * 获取默认工资单模板
     *
     * @param salarySobIds
     * @return
     */
    List<SalaryTemplatePO> getDefaultTemplates(List<Long> salarySobIds);

    /**
     * 根据薪资账套id获取工资单模板
     * @param ids
     * @return
     */
    List<SalaryTemplatePO> getBySalarySobIds(Collection<Long> ids);

    /**
     * 工资单模板列表
     * @param queryParam
     * @return
     */
    PageInfo<SalaryTemplateListDTO> listPage(SalaryTemplateQueryParam queryParam);

    /**
     * 获取所有设置了定时发送的默认工资单模板
     */
    List<SalaryTemplatePO> getAutoSendTemplate();

    /**
     * 获取所有开启了工资单确认反馈的默认工资单模板
     * @return
     */
    List<SalaryTemplatePO> listNeedAckDefaultTemplate();
}
