const system = require("../../../../system");
const Decimal = require('decimal.js');
const PER_TAX = 1; //个税
/**
 * 附加税算法
 * 注意：1 由于销售方类型不同 所以算法不同 需要对参数验证单独处理
 * 
 * 税率的格式   传去除 %号的数值  比如：
 *   96%,  则这个值就传 "taxCostPriRat"=96 
 */
module.exports.calcInvoice = (params) => {
  try {
    
    //根据 cumulativeProfitOfvalTax 查找对应梯度的个税税率
    let calRateRangeResForVal = calRateRange(params.valueAddedTax, params.valAddTaxRange, null);

    let {addTaxRat} = calRateRangeResForVal;
    //参数验证
    verificationParams(params.valueAddedTax,addTaxRat);
    //附加税
    let res = calAddTax(Number(params.valueAddedTax || 0), Number(addTaxRat || 0));
    return system.getResult(res);
  } catch (error) {
    return system.getResult(-1,`系统错误 错误信息 ${error}`);
  }
}

/**
 * 计算附加税 
 * @param {*} valueAddedTax 
 * @param {*} addTaxRat 
 */
let calAddTax=(valueAddedTax, addTaxRat)=>{
  if (addTaxRat == 0) {
    return 0
  } else {
    return new Decimal(valueAddedTax).mul(addTaxRat).div(100).toFixed(2);
  }
}

/**
 * 计算税率值
 * @param {*} amount    金额
 * @param {*} taxRange  税率范围
 * @param {*} type      类型  1：个税  2 增值税
 */
let calRateRange = (amount, taxRange, type=2) => {
  let res = {};
  if (type === PER_TAX) {
    for (let item of taxRange) {
      if (item.minValue <= amount && amount <= item.maxValue) {
        res.taxPer = item.rate;
        res.quiCalDed = item.quiCalDed;
        break;
      }
    }
  } else {
    for (let item of taxRange) {
      if (item.minValue <= amount && amount <= item.maxValue) {
        res.valAddTaxRat = item.zengzhiRate;
        res.addTaxRat = item.fujiaRate;
        break;
      }
    }
  }
  return res;
}

/**
 * 校验各种费率 的合法性
 * @param {*} params 
 * params
 */
let verificationParams = (valueAddedTax,addTaxRat) => {
  if(addTaxRat > 100){
    system.getResult(-1,`参数错误 销售方类型非法`);
  }
}