package com.bjtdba.wares.service.impl;

import com.bjtdba.entity.wares.StoreProduct;
import com.bjtdba.entity.wares.StoreProductAttrValue;
import com.bjtdba.wares.dao.StoreProductAttrValueDao;
import com.bjtdba.wares.dao.StoreProductDao;
import com.bjtdba.wares.dao.SystemConfigValueDao;
import com.bjtdba.wares.service.PensionService;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

@Service
public class PensionServiceImpl implements PensionService {

    /**
     * 商品表
     */
    @Autowired
    private StoreProductDao storeProductDao;
    /**
     * 配置信息
     */
    @Autowired
    private SystemConfigValueDao systemConfigValueDao;

    /**
     *
     */
    @Autowired
    private StoreProductAttrValueDao storeProductAttrValueDao;
    /**
     *   养老金    1、查询商品返利类型（1、自定义0、系统）。
     *                商户单独设置商品返利比例养老金计算公式：
     *               【商品价格-商品的价格*手续费（extension_one表 查询config_key = online_yanglao）】*返利比例（商户单独设置商品返利比例）*yanglaojin_admin（rrx_system_config_value表）
     *            2、系统返利分为两种：（1、商户设置的默认返利，2、储蓄保平台设置的返利）
     *            3、查询rrx_system_config_value表，查看商户设置的返利比例是否为0。（查询config_key=base_commission and mer_id = 商户ID）
     *               计算养老金公式：【商品价格-商品的价格*手续费（rrx_system_config_value表 查询config_key = online_yanglao）】*返利比例（商户默认比例）*yanglaojin_admin（rrx_system_config_value表）
     *            4、储蓄保平台默认养老金比例：
     *               【商品价格-商品的价格*手续费（rrx_system_config_value表 查询config_key = online_yanglao）】*返利比例（储蓄保平台默认比例）*yanglaojin_admin（rrx_system_config_value表）
     *
     */
    public BigDecimal pension(StoreProductAttrValue storeProductAttrValue){
        /**
         * 三种返利方式的手续费和养老金比例都是相等  商品价格
         */
        int a = 1000;
        BigDecimal price = storeProductAttrValue.getPrice();//商品价格
        //BigDecimal shouxufei = new BigDecimal(systemConfigValueDao.selectConfigValueByKey("online_yanglao")).divide(new BigDecimal(100));//手续费
        BigDecimal yanglaojibili = new BigDecimal(systemConfigValueDao.selectConfigValueByKey("yanglaojin_admin")).divide(new BigDecimal(100));//养老金比例
        BigDecimal fanlibili = null;

        //查询商品查看该商品属于那种返利方式（1、自定义0、系统） extension_type   研究养老相关的数据是否可以独立出来一张表
        StoreProduct StoreProduct = storeProductDao.selectByProductId(storeProductAttrValue.getProduct_id());
        if(StoreProduct.getExtension_type() == 1){
            /**
             * 查询商品表查看商户设置的商品返利比例   如果值为0这走默认返利比例，反之走商品自己的返利比例
             */
            if(storeProductAttrValue.getExtension_one().compareTo(BigDecimal.ZERO)==0){
                //true  == 0
                //BigDecimal yanglaojin = acquiesceIn(storeProductAttrValue);//去搜索两个默认的返利模式    商户默认   平台默认
                //查询那种返利比例  有  商家默认and平台默认
                fanlibili = acquiesceIn(StoreProduct.getMer_id()).divide(new BigDecimal(100));
            }else{
                /**
                 * 商户单独设置商品返利比例养老金计算公式：
                 * 商品价格-商品的价格*手续费（查询config_key = online_yanglao）】*返利比例（商户单独设置商品返利比例   是在商品表中）*yanglaojin_admin（rrx_system_config_value表）
                 */
                fanlibili = storeProductAttrValue.getExtension_one().divide(new BigDecimal(100));//商品返利比例

            }
        }else if(StoreProduct.getExtension_type() == 0){
            //BigDecimal yanglaojin = acquiesceIn(storeProductAttrValue);
            //查询那种返利比例  有  商家默认and平台默认
            fanlibili = acquiesceIn(StoreProduct.getMer_id()).divide(new BigDecimal(100));
        }
        //BigDecimal yanglaojing = (price.subtract(price.multiply(shouxufei))).multiply(fanlibili).multiply(yanglaojibili);//商品养老金
        BigDecimal yanglaojing = price.multiply(fanlibili).multiply(yanglaojibili);
        return yanglaojing;
    }
    /**
     * 商户默认系统默认养老金算法
     */
    private BigDecimal acquiesceIn(Integer mer_id){
        /**
         * 查询rrx_system_config_value表，查看商户设置的返利比例是否为0。（查询config_key=base_commission and mer_id = 商户ID）   判断商户的返利比例
         *   计算养老金公式：【商品价格-商品的价格*手续费（rrx_system_config_value表 查询config_key = online_yanglao）】*返利比例（商户默认比例）*yanglaojin_admin（rrx_system_config_value表）
         */
        String configValue = "0";
        /**
         * 查询商户是否有自己设置返利比例，1、如果设置走商户默认的返利比例，2、反之就要走储蓄宝平台默认的返利比例
         */
        configValue = systemConfigValueDao.selectConfigValueByKeyAndMerId("base_commission",mer_id);//商户默认返利比例
        if(configValue==null||configValue.equals("0")){
            /**
             * 4、储蓄保平台默认养老金比例：
             */
            configValue = systemConfigValueDao.selectConfigValueByKey("extension_one_rate");//储蓄宝平台默认返利比例
        }
        configValue = configValue.replace("\"","");
        BigDecimal fanlibili = new BigDecimal(configValue);//返利比例

        return fanlibili;
    }
    /**
     * 商品列表的养老金计算方法
     */
    public BigDecimal productPension(Integer product_id){

        StoreProduct StoreProduct = storeProductDao.selectByProductId(product_id);
        BigDecimal yanglaojing = null;
        // 8会员300  10高级会员3000 14合伙人商品10000 15股权商品10000 16合伙人+股权商品2000
        if(StoreProduct.getType()==8 || StoreProduct.getType()==10){
            BigDecimal price = new BigDecimal(StoreProduct.getPrice());//商品价格
            yanglaojing = price.multiply(new BigDecimal(0.1));
        }else if(StoreProduct.getType()==14){
            BigDecimal price = new BigDecimal(StoreProduct.getPrice());//商品价格
            yanglaojing = price.multiply(new BigDecimal(0.05));
        }else if(StoreProduct.getType()==15){
            yanglaojing =  new BigDecimal(0);
        }else if(StoreProduct.getType()==16){
            BigDecimal price = new BigDecimal(StoreProduct.getPrice());//商品价格
            yanglaojing = price.multiply(new BigDecimal(0.025));
//        }else if(StoreProduct.getType()==17){
//            BigDecimal price = new BigDecimal(StoreProduct.getPrice());//商品价格
//            yanglaojing = price.multiply(new BigDecimal(0.02));
//            yanglaojing = price.multiply(new BigDecimal(0.01));//养老金 一壶茶会员商户从2% 改成1%
        }else{
            BigDecimal price = new BigDecimal(StoreProduct.getPrice());//商品价格

//            if($extension['pension_is']==1){
//                $pension_num=Db::name("store_product_attr_value")->where("product_id",$good_id)->value('pension_num');
//                if($pension_num && $pension_num>0){
//                    return set_price_rtrim( $extension['price'] * $pension_num/100);
//                }
//
//            }
//            if($productType==17){
//                $member_settings=merchantConfig($extension['mer_id'], 'member_settings');
//                $user_yanglaojin = $extension['price'] * $member_settings['ylj']/100;
//                return set_price_rtrim($user_yanglaojin);
//            }

            if(StoreProduct.getPension_is()==1){
                StoreProductAttrValue storeProductAttrValue = storeProductAttrValueDao.selectByProductId(product_id);


                if(storeProductAttrValue!=null){
                    return price.multiply(new BigDecimal(String.valueOf(storeProductAttrValue.getPension_num())).divide(new BigDecimal("100.0")));

                }
            }
            if(StoreProduct.getType()==17){
                String member_settings=systemConfigValueDao.selectConfigValueByKeyAndMerId("member_settings",StoreProduct.getMer_id());

                try {
                    ObjectMapper mapper = new ObjectMapper();
                    JsonNode rootNode = mapper.readTree(member_settings);

                    String yljValue = rootNode.get("ylj").asText();
                    int ylj_bili = Integer.parseInt(yljValue);

                    return price.multiply(new BigDecimal(String.valueOf(ylj_bili)).divide(new BigDecimal("100.0")));

                } catch (Exception e) {
                    e.printStackTrace();
                }

            }


            //BigDecimal shouxufei = new BigDecimal(systemConfigValueDao.selectConfigValueByKey("online_yanglao")).divide(new BigDecimal(100));//手续费
            BigDecimal yanglaojibili = new BigDecimal(systemConfigValueDao.selectConfigValueByKey("yanglaojin_admin")).divide(new BigDecimal(100));//养老金比例
            BigDecimal fanlibili = null;
            //查询商品查看该商品属于那种返利方式（1、自定义0、系统） extension_type   研究养老相关的数据是否可以独立出来一张表
            if(StoreProduct.getExtension_type() == 1){
                /**
                 * 查询商品表查看商户设置的商品返利比例   如果值为0这走默认返利比例，反之走商品自己的返利比例
                 */
                StoreProductAttrValue storeProductAttrValue = storeProductAttrValueDao.selectByProductId(product_id);
                if(storeProductAttrValue.getExtension_one().compareTo(BigDecimal.ZERO)==0){
                    //true  == 0
                    //BigDecimal yanglaojin = acquiesceIn(storeProductAttrValue);//去搜索两个默认的返利模式    商户默认   平台默认
                    //查询那种返利比例  有  商家默认and平台默认
                    fanlibili = acquiesceIn(StoreProduct.getMer_id()).divide(new BigDecimal(100));
                }else{
                    /**
                     * 商户单独设置商品返利比例养老金计算公式：
                     * 商品价格-商品的价格*手续费（查询config_key = online_yanglao）】*返利比例（商户单独设置商品返利比例   是在商品表中）*yanglaojin_admin（rrx_system_config_value表）
                     */
                    fanlibili = storeProductAttrValue.getExtension_one().divide(new BigDecimal(100));//商品返利比例

                }
            }else{
                //BigDecimal yanglaojin = acquiesceIn(storeProductAttrValue);
                //查询那种返利比例  有  商家默认and平台默认
                fanlibili = acquiesceIn(StoreProduct.getMer_id()).divide(new BigDecimal(100));
            }
            //yanglaojing = (price.subtract(price.multiply(shouxufei))).multiply(fanlibili).multiply(yanglaojibili);//商品养老金

            yanglaojing = price.multiply(fanlibili).multiply(yanglaojibili);
        }

        return yanglaojing;
    }
}
