package jnpf.personnels.service;

import com.alibaba.excel.context.AnalysisContext;
import jnpf.model.personnels.bo.FtbRosterImportHeadRuleBO;
import jnpf.model.personnels.vo.roster.FtbRosterCategoryVO;

import java.util.Map;

public interface FtbPersonnelsRosterValidService {

    /**
     * 进行表头校验
     * 该方法根据提供的表头信息和规则，生成用于后续数据校验的规则配置
     *
     * @param sheetName 工作表名称，用于识别和定位特定的表格
     * @param head      表头信息映射，键是表头的索引，值是表头的文本内容
     * @return 返回一个映射，其中键是表头索引，值是对应的导入规则对象，用于后续的数据校验
     */
    Map<Integer, FtbRosterImportHeadRuleBO> headerVerification(String sheetName, Map<Integer, String> head);

    /**
     * 进行数据校验
     * 根据提供的上下文、表头规则和数据，该方法将数据分为正常数据和错误数据，并进行处理
     *
     * @param context 分析上下文，提供了解析过程中的状态和配置信息
     * @param head 表头规则映射，用于指导数据如何校验
     * @param data 待校验的数据映射，键是数据行号，值是该行的数据内容
     * @param normalData 用于存储校验通过的正常数据的对象
     * @param errorData 用于存储校验未通过的错误数据的对象
     */
    void dataValidation(AnalysisContext context, Map<Integer, FtbRosterImportHeadRuleBO> head, Map<Integer, String> data
            , FtbRosterCategoryVO normalData, FtbRosterCategoryVO errorData);

    /**
     * 将数据保存到Redis
     * 该方法负责将校验后的正常数据和错误数据分别存储到Redis中，以便后续使用或展示
     *
     * @param context 分析上下文，可能包含操作上下文或事务信息
     * @param normalData 校验通过的正常数据对象
     * @param errorData 校验未通过的错误数据对象
     */
    void saveDataToRedis(AnalysisContext context, FtbRosterCategoryVO normalData, FtbRosterCategoryVO errorData);

}
