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

import com.yunyan.business.constant.TemplateEpType;
import com.yunyan.business.document.y22.pojo.finalExcelY22.FinalExcelDataVo;
import com.yunyan.business.document.y22.pojo.finalExcelY22.FinalP3T1TotalItemVo;
import com.yunyan.common.utils.StringUtils;

import java.util.Objects;

/**
 * 决算的桂平模板的 设置
 */
public class FinalY23GpUtils {

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

        return false;
    }

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

        changeTable(dataVo);
        setT1(dataVo);
        setT7(dataVo);
    }

    /**
     * 第2段的表格
     * @param dataVo
     */
    private static void changeTable(FinalExcelDataVo dataVo) {
        String templateExportType = dataVo.getTemplateExportType();
        if (checkTmplateType(templateExportType)) {
            return;
        }
        FinalY23ChangeTableUtils.changeZeroValueToBlank(dataVo);
    }

    /**
     * 设置 表格中1的名称
     * @param dataVo
     */
    private static void setT1(FinalExcelDataVo dataVo) {
        dataVo.getT1Z01Vo().getList().forEach(item -> {
            if (StringUtils.isNotBlank(item.getIncomeName()) && item.getIncomeName().startsWith("使用非财政拨款结余和专用结余")) {
                item.setIncomeName("使用非财政拨款结余（含专用结余）");
            }
        });
    }

    private static void setT7(FinalExcelDataVo dataVo) {
        if(Objects.isNull(dataVo.getP3T7Vo())  || Objects.isNull(dataVo.getP3T7Vo().getAssetVo()) || StringUtils.isBlank(dataVo.getP3T7Vo().getAssetVo().getCarStr())) {
            return;
        }
        String carStr = dataVo.getP3T7Vo().getAssetVo().getCarStr();
        //删除 主要领导干部用车0辆、离退休干部服务用车0辆、
        if(carStr.contains("主要领导干部用车")) {
            carStr = carStr.replaceFirst("、主要领导干部用车\\d+辆", "");
        }
        if(carStr.contains("离退休干部服务用车")) {
            carStr = carStr.replaceFirst("、离退休干部服务用车\\d+辆", "");
        }
        dataVo.getP3T7Vo().getAssetVo().setCarStr(carStr);

    }

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

        String info = incomeItem.getInfo();
        if(incomeItem.getName().startsWith("一般公共预算财政") ||  incomeItem.getName().startsWith("政府性基金预算") || 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);
        }
        if (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("其他收入")) {
            //info += "，为预算单位在“财政拨款收入”“事业收入”“经营收入”之外取得的收入";
            incomeItem.setInfo(info);
            //如果是 =0, 不显示 为 xxx的资金
            if("0".equals(incomeItem.getValueYear())) {
                incomeItem.setInfoDescFlag(0);
            } else {
                incomeItem.setInfoDescFlag(1);
            }
            //incomeItem.setInfoDesc("预算单位在“财政拨款收入”“事业收入”“经营收入”之外取得的收入");
        }
        /*if (incomeItem.getName().startsWith("使用非财政拨款结余")) {
            //info += "，主要是单位历年滚存的非限定用途的非同级财政拨款结余资金，主要为非财政拨款结余扣除结余分配后滚存的金额";
            incomeItem.setInfo(info);
        }*/
        if (incomeItem.getName().startsWith("使用非财政拨款结余和专用结余")) {
            incomeItem.setName(incomeItem.getName().replaceFirst("使用非财政拨款结余和专用结余", "使用非财政拨款结余（含专用结余）"));
            info = info.replaceFirst("使用非财政拨款结余和专用结余", "使用非财政拨款结余（含专用结余）");
            //info += "，主要是所属事业单位在当年的“财政拨款收入”“事业收入”“经营收入”及“其他收入”不能保证其支出的情况下，使用以前年度积累的非财政拨款结余弥补本年度收支缺口的资金";
            incomeItem.setInfo(info);
            if(!"0".equals(incomeItem.getValueYear())) {
                incomeItem.setInfoDescFlag(1);
            }
            incomeItem.setInfoDesc("单位历年滚存的非限定用途的非同级财政拨款结余");
        }



    }
    /**
     * 第3部分的第一的支出的设置
     * @param itemInfo
     * @param templateExportType
     */
    public static void setP3T1ItemInfo2(FinalP3T1TotalItemVo itemInfo, String templateExportType) {
        if(!TemplateEpType.Y2023FT5GP.getCode().equals(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);
        }
    }

    /**
     * 设置 第3部分的第7的用车名称, 删掉时, 返回 -1, 否则直接返回
     * @param itemName
     * @param templateExportType
     * @return
     */
    public static String setP3p7p3CarName(String itemName, String templateExportType) {
        if(!TemplateEpType.Y2023FT5GP.getCode().equals(templateExportType)) {
            return "";
        }

        //主要负责人用车
        if (itemName.startsWith("主要负责人用车")) {
            String result = itemName.replace("主要负责人用车", "主要领导干部用车");
            return result;
        }

        return "";
    }
}
