package com.yd.csf.api.service.impl;

import com.yd.common.enums.CommonEnum;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.service.ApiAgentAccumulatedFycService;
import com.yd.csf.api.service.ApiMemberGradeConfigService;
import com.yd.csf.feign.request.fyc.ApiInitAgentAccumulatedFycRequest;
import com.yd.csf.service.model.AgentAccumulatedFyc;
import com.yd.csf.service.service.IAgentAccumulatedFycService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Slf4j
@Service
public class ApiAgentAccumulatedFycServiceImpl implements ApiAgentAccumulatedFycService {

    @Resource
    private IAgentAccumulatedFycService iAgentAccumulatedFycService;

    @Resource
    private ApiMemberGradeConfigService apiMemberGradeConfigService;

    /**
     * 初始化fyc
     * @param request
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result initAgentAccumulatedFyc(ApiInitAgentAccumulatedFycRequest request) {
        //校验初始化fyc入参参数
        verifyInitFycRequest(request);
        //新增初始化fyc记录
        AgentAccumulatedFyc fyc = new AgentAccumulatedFyc();
        fyc.setFycBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_AGENT_ACCUMULATED_FYC.getCode()));
        //业务员ID
        fyc.setAgentId(request.getAgentId());
        //业务员名称
        fyc.setAgentName(request.getAgentName());
        //初始化等级（初始化已生效积分对应等级）
        fyc.setInitGrade(request.getInitGrade());
        //初始化已生效积分（不限业务场景）=> 通过积分等级配置表查询对应的等级的积分范围最高值
        BigDecimal initEffect = apiMemberGradeConfigService.getInitEffect(request.getInitGrade());
        fyc.setInitEffect(initEffect);
        //未生效累计积分（不限业务场景）
        fyc.setNoEffect(BigDecimal.ZERO);
        //已生效累计积分（不限业务场景）= 初始化已生效积分
        fyc.setEffect(fyc.getInitEffect());
        //累计积分 = 未生效累计积分 + 已生效累计积分
        fyc.setTotalFyc(fyc.getNoEffect().add(fyc.getEffect()));
        //已生效累计首期佣金积分值（佣金场景）
        fyc.setFirstCommission(BigDecimal.ZERO);
        //未生效累计首期佣金积分值（佣金场景）
        fyc.setNoFirstCommission(BigDecimal.ZERO);
        //已生效累计非首期佣金积分值（佣金场景）
        fyc.setRyc(BigDecimal.ZERO);
        //未生效累计非首期佣金积分值（佣金场景）
        fyc.setNoRyc(BigDecimal.ZERO);
        //已生效累计首期销售佣金积分值（销售佣金场景（佣金场景的其中一个））
        fyc.setFirstSalesCommission(BigDecimal.ZERO);
        //未生效累计首期销售佣金积分值（销售佣金场景（佣金场景的其中一个））
        fyc.setNoFirstSalesCommission(BigDecimal.ZERO);
        //晋升职级累计积分 = 初始化已生效积分（不限业务场景） +  已生效累计首期销售佣金积分值（销售佣金场景（佣金场景的其中一个））
        fyc.setPromotion(fyc.getInitEffect().add(fyc.getFirstSalesCommission()));
        //当前等级，业务员当前的会员等级编码（会员等级配置表等级编码）
        fyc.setCurrentGradeCode(request.getInitGrade());
        //最后计算日期，记录最后一次计算累计FYC的日期
        fyc.setLastCalcDate(LocalDateTime.now());
        //状态(0:停用 1:启用)
        fyc.setStatus(1);
        iAgentAccumulatedFycService.saveOrUpdate(fyc);
        return Result.success();
    }


    /**
     * 校验初始化fyc入参参数
     * @param request
     */
    public void verifyInitFycRequest(ApiInitAgentAccumulatedFycRequest request){
        if (StringUtils.isBlank(request.getAgentId())) {
            throw new BusinessException("业务员ID不能为空");
        }
        if (StringUtils.isBlank(request.getAgentName())) {
            throw new BusinessException("业务员名称不能为空");
        }
        if (StringUtils.isBlank(request.getInitGrade())) {
            throw new BusinessException("初始化等级不能为空");
        }
    }

}
