package com.yunyan.business.document.y23.finalData;

import cn.hutool.core.util.NumberUtil;
import com.yunyan.business.constant.TemplateEpType;
import com.yunyan.business.document.utils.ReadExcelUtil;
import com.yunyan.business.document.y22.FinalY22Utils;
import com.yunyan.business.document.y22.pojo.finalExcelY22.*;
import com.yunyan.common.utils.NumberFormatUtils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * 决算的天等模板的读取(从凭祥处复制出来)
 */
public class FinalY23TDengUtils {

    /**
     * 检查 是否是模板的 修改
     * @param templateExportType
     * @return 当不属于时, 返回true
     */
    private static boolean checkTmplateType(String templateExportType) {
        if(!TemplateEpType.Y2023FT6TDEND.getCode().equals(templateExportType) ) {
            return true;
        }

        return false;
    }

    /**
     * 设置 区域的一些设置
     *
     * @param dataVo
     */
    public static void setAreaInitYear(FinalExcelDataVo dataVo) {
        String templateExportType = dataVo.getTemplateExportType();
        if (checkTmplateType(templateExportType)) {
            return;
        }

        //setP3T2SubItemInfo(dataVo);


    }

    /**
     * 更新年初预算后的 一些设置
     * @param dataVo
     */
    public static void setAreaCompareBudgetYear(FinalExcelDataVo dataVo) {
        String templateExportType = dataVo.getTemplateExportType();
        if (checkTmplateType(templateExportType)) {
            return;
        }

        //p3p1设置
        setP3T1List(dataVo);
        //p3p2设置
        setP3T2ItemInfo(dataVo);
        //p3p3设置
        setP3T3ItemInfo(dataVo);
    }



    /**
     * 第3部分的第一的收入的设置
     * @param incomeItem
     * @param templateExportType
     */
    public static void setP3T1ItemInfo(FinalP3T1TotalItemVo incomeItem, String templateExportType) {
        if(checkTmplateType(templateExportType)) {
            return;
        }

        String info = incomeItem.getInfo();
        if(incomeItem.getName().startsWith("一般公共预算财政") ||  incomeItem.getName().startsWith("政府性基金预算") || incomeItem.getName().startsWith("国有资本经营预算")) {
            info += "，为天等县本级财政当年拨付的资金";
            incomeItem.setInfo(info);
        }
        /*if (incomeItem.getName().startsWith("国有资本经营预算")) {
            info += "，为市本级财政当年拨付的资金";
            incomeItem.setInfo(info);
        }*/

        if (incomeItem.getName().startsWith("经营收入")) {
            info += "，为事业单位在业务活动之外开展非独立核算经营活动取得的收入";
            incomeItem.setInfo(info);
        }

        if (incomeItem.getName().startsWith("年初结转和结余")) {
            incomeItem.setName(incomeItem.getName().replaceFirst("年初结转和结余", "上年结转和结余"));
            info += "，既包括财政拨款结转和结余，也包括事业收入、经营收入、其他收入的结转和结余";
            //改成 年初
            info = info.replaceFirst("年初结转和结余", "上年结转和结余");
            incomeItem.setInfo(info);
        }

        if (incomeItem.getName().startsWith("其他收入")) {
            info += "，为预算单位在“财政拨款收入”“事业收入”“经营收入”之外取得的收入";
            incomeItem.setInfo(info);
            incomeItem.setInfoDescFlag(0);
        }

        if (incomeItem.getName().startsWith("事业收入")) {
            info += "，为事业单位开展业务活动取得的收入";
            incomeItem.setInfo(info);
            incomeItem.setInfoDescFlag(0);
        }
    }
    /**
     * 第3部分的第一的支出的设置
     * @param itemInfo
     * @param templateExportType
     */
    public static void setP3T1ItemInfo2(FinalP3T1TotalItemVo itemInfo, String templateExportType) {
        if(checkTmplateType(templateExportType)) {
            return;
        }

        String info = itemInfo.getInfo();
        if (itemInfo.getName().startsWith("结余分配")) {
            info += "，为事业单位按规定提取的职工福利基金、事业基金和缴纳的所得税等";
            itemInfo.setInfo(info);
        }
        if (itemInfo.getName().startsWith("年末结转和结余")) {
            info += "，为本年度或以前年度预算安排、因客观条件发生变化无法按原计划实施，需要延迟到以后年度按有关规定继续使用的资金，既包括财政拨款结转和结余，也包括事业收入、经营收入、其他收入的结转和结余";
            itemInfo.setInfo(info);
            itemInfo.setInfoDescFlag(0);
        }

        if (itemInfo.getName().startsWith("事业收入")) {
            //单位自行填写
            itemInfo.setInfoDescFlag(1);
        }
    }


    /**
     * 附属单位上缴 去除, 去除 返回 false,  以及 为0的数, 去除返回 false
     *
     * @param incomeItem
     * @param templateExportType
     * @return
     */
    public static boolean checkAddP3T1Item(FinalP3T1TotalItemVo incomeItem, String templateExportType) {
        //去除0数
        if (!checkTmplateType(templateExportType) && "0".equals(incomeItem.getValueYear())) {
            return false;
        }
        if (!checkTmplateType(templateExportType) && incomeItem.getName().startsWith("附属单位上缴")) {
            return false;
        }

        if(!checkTmplateType(templateExportType) && incomeItem.getName().startsWith("上级补助收入")) {
            return false;
        }

        return true;
    }

    /**
     * 天等的 设置 p3p2的子项 到外面一层
     * @param dataVo
     */
    public static void setP3T2SubItemInfo(FinalExcelDataVo dataVo) {
        List<FinalP3T2CategoryItemVo> list = dataVo.getP3T2Vo().getList();
        if(list == null || list.isEmpty()) {
            return;
        }

        List<FinalP3T2ItemVo> p3T2SubItemList = new ArrayList<>();
        /*for (FinalP3T2CategoryItemVo categoryItemVo : list) {
            List<FinalP3T2ItemVo> p3T2ItemList = categoryItemVo.getList();
            for (FinalP3T2ItemVo p3T2ItemVo : p3T2ItemList) {
                p3T2SubItemList.add(p3T2ItemVo);
            }
        }

        dataVo.getP3T2Vo().setSubItemList(p3T2SubItemList);*/
    }

    /**
     * 设置 p3p1的List 去除为0的项
     * @param dataVo
     */
    public static void setP3T1List(FinalExcelDataVo dataVo) {
        /*List<FinalP3T3ItemVo> list = dataVo.getP3T1Vo().getList();
        if(list == null || list.isEmpty()) {
            return;
        }*/
        FinalY23BudgetCompareUtils.setP3p1ItemBudgetFilterZero(dataVo);
    }

    /**
     * 天等的 设置 p3p2的项 去除 为0的项
     * @param dataVo
     */
    public static void setP3T2ItemInfo(FinalExcelDataVo dataVo) {
        List<FinalP3T3ItemVo> list = dataVo.getP3T3Vo().getList();
        if(list == null || list.isEmpty()) {
            return;
        }
        FinalY23BudgetCompareUtils.setP3p2SubItemBudgetFilterZero(dataVo);
    }

    /**
     * 天等的 设置 p3p3的项 去除 为0的项
     * @param dataVo
     */
    public static void setP3T3ItemInfo(FinalExcelDataVo dataVo) {
        List<FinalP3T3ItemVo> list = dataVo.getP3T3Vo().getList();
        if(list == null || list.isEmpty()) {
            return;
        }
        FinalY23BudgetCompareUtils.setP3p3ItemBudgetFilterZero(dataVo);
    }

}
