package com.bonus.material.archives.mapper;

import com.bonus.common.biz.domain.TreeNode;
import com.bonus.material.archives.domain.ArchivesDetails;
import com.bonus.material.archives.domain.ArchivesInfo;
import com.bonus.material.archives.domain.ElcSignatureInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author ma_sh
 * @create 2024/12/26 9:27
 */
public interface ArchivesMapper {

    /**
     * 获取电子档案分类树
     * @param archiveInfo
     * @return
     */
    List<TreeNode> getTypeList(ArchivesInfo archiveInfo);

    /**
     * 根据（名称及父级id）查询电子档案分类
     * @param archiveInfo
     * @return
     */
    ArchivesInfo selectByName(ArchivesInfo archiveInfo);

    /**
     * 根据（名称及level级别）查询电子档案分类
     * @param name 节点名称
     * @param level 节点层级
     * @return list列表
     */
    ArchivesInfo selectInfoListByNameAndLevel(@Param("name") String name, @Param("level") Integer level);


    /**
     * 根据档案details表文件夹类型的节点id（档案文件名 + 档案level + 档案所属info的value）
     * @param name 档案文件名
     * @param value 档案所属info表的value（同类型同层级唯一键值）
     * @return 档案details表主键
     */
    Integer selectDetailsNodeIdByDocNameAndInfoValue(@Param("name") String name, @Param("level") Integer level, @Param("value") Integer value);

    /**
     * 新增电子档案分类
     * @param archiveInfo
     * @return
     */
    int insertInfo(ArchivesInfo archiveInfo);

    /**
     * 修改电子档案分类
     * @param archiveInfo
     * @return
     */
    int updateInfo(ArchivesInfo archiveInfo);

    /**
     * 根据id查询电子档案分类
     * @param archiveInfo
     * @return
     */
    List<ArchivesInfo> getListById(ArchivesInfo archiveInfo);

    /**
     * 删除电子档案分类
     * @param archiveInfo
     * @return
     */
    int deleteInfo(ArchivesInfo archiveInfo);

    /**
     * 获取电子档案详情
     * @param archivesDetails
     * @return
     */
    List<ArchivesDetails> selectDetailsList(ArchivesDetails archivesDetails);

    /**
     * 根据名称查询电子档案详情
     * @param archivesDetails
     * @return
     */
    ArchivesDetails selectDetailsByName(ArchivesDetails archivesDetails);

    /**
     * 新增电子档案详情
     * @param archivesDetails
     * @return
     */
    int insertDetails(ArchivesDetails archivesDetails);

    /**
     * 修改电子档案右侧类型
     * @param archivesDetails
     * @return
     */
    int updateDetails(ArchivesDetails archivesDetails);

    /**
     * 删除电子档案右侧类型
     * @param archivesDetails
     * @return
     */
    int deleteDetails(ArchivesDetails archivesDetails);

    /**
     * 下载电子档案右侧详情
     * @param detailsIdList
     * @return
     */
    List<ArchivesDetails> selectDetails(@Param("list") List<Long> detailsIdList);

    /**
     * 根据名称查询电子档案右侧详情
     * @param archivesDetails
     * @return
     */
    ArchivesDetails selectDetailsUpdateName(ArchivesDetails archivesDetails);

    /**
     * 修改电子档案右侧详情
     * @param info
     * @return
     */
    int updateSign(ElcSignatureInfo info);

    /**
     * 查询电子档案右侧详情
     * @param info
     * @return
     */
    ElcSignatureInfo getSign(ElcSignatureInfo info);
}
