package com.yunyan.business.document.y22;

import cn.hutool.core.io.IoUtil;
import cn.hutool.json.JSONUtil;
import com.yunyan.business.document.y22.pojo.finalExcelY22.FinalP3T8NoFillDeptVo;
import com.yunyan.common.utils.StringUtils;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * 读取 第8部分 未填写的 文件
 */
@Slf4j
public class ReadFileNoFIllDeptUtils {

    @SneakyThrows
    public static void main(String[] args) {

        testRead();
        log.debug("结束");

    }


    /**
     * 读取
     */
    private static void testRead() {
        List<FinalP3T8NoFillDeptVo> result = ReadFileNoFIllDeptUtils.readData();
        int num = checkP8fillDept(result, "田东", 103);

        log.debug("num: [{}]", num);
    }

    /**
     * 获取单位的 数据
     * @return
     */
    public static List<FinalP3T8NoFillDeptVo> readData() {

        String fileName = "y2022.p3p8.noFillDept.txt";

        List<FinalP3T8NoFillDeptVo> listVo = new ArrayList<>();
        InputStream templateInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("tempData/" + fileName);
        if(null == templateInputStream) {
            log.error("读取 resouse的文件 异常: [{}]", fileName);
            throw new RuntimeException("读取 resouse的文件 异常: " + fileName);
        }
        String jsonTableContent = IoUtil.readUtf8(templateInputStream);
        if(StringUtils.isNotBlank(jsonTableContent)) {

            listVo = JSONUtil.toList(jsonTableContent, FinalP3T8NoFillDeptVo.class);

            if(!listVo.isEmpty()) {
                /*BudgetT6DeptVo t6DeptVo = listVo.stream().filter(i->i.getDeptCode().equals(deptCode)).findFirst().orElse(null);
                return t6DeptVo;*/
            }

        }

        return listVo;
    }

    /**
     * 判断 部门是否在 不用填报的第8部分的, 如查询到返回0,  否则返回1
     * @param list
     * @param area 区域
     * @param deptCode 部门编码
     * @return
     */
    public static int checkP8fillDept(List<FinalP3T8NoFillDeptVo> list, String area, Integer deptCode) {
        if(null == list || list.isEmpty()) {
            return 0;
        }

        Optional optional = list.stream().filter(j->j.getArea().equals(area)).filter(i->i.getDeptCodeList().contains(deptCode)).findFirst();
        if(optional.isPresent()) {
            return 1;
        }

        return 0;
    }

}
