package com.hzs.retail.member.controller.api;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.member.base.service.ICuMemberService;
import com.hzs.retail.member.service.ICuMemberRetailRegionService;
import com.hzs.retail.member.service.IMemberRetailService;
import com.hzs.retail.member.vo.RecommendListVO;
import com.hzs.retail.member.vo.RetailMemberInfoVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * 新零售首页控制器
 */
@RestController
@RequestMapping("/api/retail-member")
@Slf4j
public class RetailMemberController extends BaseController {

    @Autowired
    private ICuMemberService iCuMemberService;
    @Autowired
    private IMemberRetailService iMemberRetailService;
    @Autowired
    private ICuMemberRetailRegionService iCuMemberRetailRegionService;

    /**
     * 获取登录会员信息
     *
     * @return
     */
    @GetMapping("/get-info")
    public AjaxResult getInfo() {
        RetailMemberInfoVO retailMemberInfoVO = iMemberRetailService.getMemberInfo(SecurityUtils.getUserId());
        if (null == retailMemberInfoVO) {
            return AjaxResult.error();
        }
        return AjaxResult.success(retailMemberInfoVO);
    }
//    @GetMapping("/test")
//    public AjaxResult test() {
//        List<Tree<String>> test1 = iCuMemberRetailRegionService.getRegionTreeList(RetailRegionTreeQueryConstants.CITY);
//        List<Tree<String>> test2 = iCuMemberRetailRegionService.getRegionTreeList(RetailRegionTreeQueryConstants.COUNTY);
//        log.info("test1: {}", test1);
//        log.info("test2: {}", test2);
//        return AjaxResult.success();
//    }


//    /**
//     * 获取会员收益区域
//     *
//     * @return
//     */
//    @GetMapping("/get-region")
//    public AjaxResult getRegion() {
//        Long userId = SecurityUtils.getUserId();
//        Integer systemType = SecurityUtils.getSystemType();
//        Integer pkCountry = SecurityUtils.getPkCountry();
//
//        CuMemberRetailRegionExt cuMemberRetailRegionExt = iCuMemberRetailRegionService.getRegionByMember(userId, EGrade.S_VIP.getValue(), systemType);
//        log.info("cuMemberRetailRegionExt -> {}", JSONUtil.toJsonStr(cuMemberRetailRegionExt));
//        if (null != cuMemberRetailRegionExt) {
//            // 已自选区域或者已后台指定
//            if (null != cuMemberRetailRegionExt.getPkId()) {
//                // 达到条件，也选择区域，需要进行显示
//                return AjaxResult.success(RetailMemberRegionVO.builder()
//                        .regionStatus(EYesNo.YES.getIntValue())
//                        .province(cuMemberRetailRegionExt.getProvince())
//                        .provinceVal(cuMemberRetailRegionExt.getProvinceVal())
//                        .city(cuMemberRetailRegionExt.getCity())
//                        .cityVal(cuMemberRetailRegionExt.getCityVal())
//                        .county(cuMemberRetailRegionExt.getCounty())
//                        .countyVal(cuMemberRetailRegionExt.getCountyVal())
//                        .build());
//            }
//            // 未自选或未后台指定 验证是否激活 未激活不允许选
//            // getIsRegion - 后台业务特殊标记,非后台办理过的为1, 后台办理过的为0,当为0时, 不设定任何条件,直接可选收益区域
//            if (EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsRegion()) {
//                // 2024.12.30 添加需求，指定会员可以进行区域选择
//                return AjaxResult.success(RetailMemberRegionVO.builder()
//                        .regionStatus(EYesNo.YES.getIntValue())
//                        .build());
//            }
//            if(EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsActivate()){
//                CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
//                log.info("retailAchieve : {}", JSONUtil.toJsonStr(retailAchieve));
//                if(ObjectUtil.isNotEmpty(retailAchieve.getArealPv())
//                        && retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0){
//                    return AjaxResult.success(RetailMemberRegionVO.builder()
//                            .regionStatus(EYesNo.YES.getIntValue())
//                            .build());
//                }
//            }
//            // 达到条件，但是没有选择区域，需要弹窗选择区域
//            // 验证伞下业绩+自己是否累计30W
//
//            /*
//                2025年6月11日 取消其他验证
//                // 2025.01.11 调整需求，当前会员必须有效（至少下过一单）
//                if (iCuMemberRetailRegionService.getOrderCount(userId, systemType, BoxProductUtil.getBoxProductListBySystemType(systemType)) == 0) {
//                    return AjaxResult.success(RetailMemberRegionVO.builder()
//                            .regionStatus(EYesNo.NO.getIntValue())
//                            .build());
//                }
//
//                // 2025.02.21 需求，2025.03.21 按正式规则执行（V5实单非注水盒数达标 或 月大区30万+小区10万，可选择区域）
//                R<CuMemberRetail> checkResult = iMemberSettleBonusApi.queryValidateBoxOrAchieve(userId);
//                if (checkResult.isSuccess()) {
//                    if (checkResult.getData().getValidateFlag()) {
//                        return AjaxResult.success(RetailMemberRegionVO.builder()
//                                .regionStatus(EYesNo.YES.getIntValue())
//                                .build());
//                    }
//                }
//             */
//        }
//        // 没达到条件，不需要显示区域
//        return AjaxResult.success(RetailMemberRegionVO.builder()
//                .regionStatus(EYesNo.NO.getIntValue())
//                .build());
//    }
//
//    /**
//     * 设置会员收益区域
//     *
//     * @param param 设置参数
//     * @return
//     */
//    @RepeatSubmitSimple
//    @PostMapping("/set-region")
//    public AjaxResult setRegion(@Valid @RequestBody RetailMemberRegionParam param) {
//        Long userId = SecurityUtils.getUserId();
//        Integer systemType = SecurityUtils.getSystemType();
//        Integer pkCountry = SecurityUtils.getPkCountry();
//
//        boolean canSet = false;
//
//        CuMemberRetailRegionExt cuMemberRetailRegionExt = iCuMemberRetailRegionService.getRegionByMember(userId, EGrade.S_VIP.getValue(), systemType);
//        log.info("cuMemberRetailRegionExt -> {}", JSONUtil.toJsonStr(cuMemberRetailRegionExt));
//        if (null != cuMemberRetailRegionExt) {
//            if (EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsRegion()) {
//                canSet = true;
//            }
//            if(EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsActivate()){
//                CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
//                if(retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0){
//                    canSet = true;
//                }
//            }
//        }
//        if(!canSet){
//            return AjaxResult.error("还未达到选择收益区域条件");
//        }
//
//        if (param.getCounty().equals(0) || param.getCity().equals(0)) {
//            // 区为0 或 市为0，没有选择区或者没有选择市
//            // 香港、澳门只有省，台湾有省、市
//            BdArea province = iAreaServiceApi.getArea(param.getProvince()).getData();
//            if (null == province) {
//                return AjaxResult.error("选择区域省不存在，请重新选择");
//            }
//            if (param.getCounty().equals(0)
//                    && !AreaConstants.XIANG_GANG.equals(province.getCode())
//                    && !AreaConstants.AO_MEN.equals(province.getCode())
//                    && !AreaConstants.TAI_WAN.equals(province.getCode())) {
//                // 区为0，不是香港、港门、台湾，则需要提示
//                return AjaxResult.error("请选择区");
//            }
//            if (param.getCity().equals(0)
//                    && !AreaConstants.XIANG_GANG.equals(province.getCode())
//                    && !AreaConstants.AO_MEN.equals(province.getCode())) {
//                // 市为0，不是香港、港门，则需要提示
//                return AjaxResult.error("请选择市");
//            }
//        }
//
//        // 校验市是否存在
//        if (!param.getCity().equals(0)) {
//            BdArea city = iAreaServiceApi.getArea(param.getCity()).getData();
//            if (null == city) {
//                return AjaxResult.error("选择区域市不存在，请重新选择");
//            }
//        }
//        // 校验区是否存在
//        if (!param.getCounty().equals(0)) {
//            BdArea county = iAreaServiceApi.getArea(param.getCounty()).getData();
//            if (null == county) {
//                return AjaxResult.error("选择区域区不存在，请重新选择");
//            }
//        }
//
//        // 校验区域是否被占用
//        CuMemberRetailRegion cuMemberRetailRegion = iCuMemberRetailRegionService.getOne(Wrappers.<CuMemberRetailRegion>lambdaQuery()
//                .eq(CuMemberRetailRegion::getProvince, param.getProvince())
//                .eq(CuMemberRetailRegion::getCity, param.getCity())
//                .eq(CuMemberRetailRegion::getCounty, param.getCounty())
//                .eq(CuMemberRetailRegion::getEffective, EYesNo.YES.getIntValue())
//                .eq(CuMemberRetailRegion::getSystemType, systemType)
//        );
//        if (null != cuMemberRetailRegion) {
//            if (userId.equals(cuMemberRetailRegion.getPkMember())) {
//                // 当前收益区域就是当前会员，不需要处理
//                return AjaxResult.success();
//            } else {
//                return AjaxResult.error("当前区域已经被占用");
//            }
//        }
//
//        param.setPkId(cuMemberRetailRegionExt.getPkId());
//        param.setPkMember(userId);
//        param.setPkCountry(pkCountry);
//        param.setSource(ENoticeWebsiteType.MEMBER.getValue());
//
//        param.setSystemType(systemType);
//
//        String str = iCuMemberRetailRegionService.setRegion(param);
//        if (null == str) {
//            return AjaxResult.success();
//        }
//        return AjaxResult.error(str);
//    }
//
//    /**
//     * 收益区域
//     *
//     * @return
//     */
//    @GetMapping("/region-tree")
//    public AjaxResult regionTree() {
//        PageUtils.clearPage();
//        List<BdArea> areaList = iCuMemberRetailRegionService.listChooseRegion(SecurityUtils.getSystemType());
//        if (CollectionUtil.isEmpty(areaList)) {
//            log.info("region-tree: 111");
//            return AjaxResult.success();
//        }
//        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
//        treeNodeConfig.setDeep(3);
//
//        //0表示最顶层的id是0
//        List<Tree<String>> build = TreeUtil.build(areaList, "0", treeNodeConfig,
//                (treeNode, tree) -> {
//                    tree.setId(treeNode.getPkId().toString());
//                    tree.setParentId(treeNode.getParent().toString());
//                    tree.setName(treeNode.getName());
//                });
//        log.info("region-tree: 222");
//        return AjaxResult.success(build);
//    }

    /**
     * 会员推荐列表
     *
     * @return
     */
    @GetMapping("/recommend-list")
    public TableDataInfo recommendList() {
        // 返回数据
        List<RecommendListVO> resultList = new ArrayList<>();

        startPage();
        List<CuMemberExt> cuMemberExtList = iCuMemberService.listRecommend(SecurityUtils.getUserId());
        if (CollectionUtil.isNotEmpty(cuMemberExtList)) {
            for (CuMemberExt cuMemberExt : cuMemberExtList) {
                resultList.add(BeanUtil.copyProperties(cuMemberExt, RecommendListVO.class));
            }
        }

        TableDataInfo tableDataInfo = getDataTable(cuMemberExtList);
        tableDataInfo.setRows(resultList);
        return tableDataInfo;
    }

    /**
     * 查询选择区域
     *
     * @param type -- city:省市，county:省市区
     * @return
     */
    @GetMapping("/query-region")
    public AjaxResult queryRegion(@RequestParam("type") String type, @RequestParam(value = "useTree", required = false) boolean useTree) {
        if(ObjectUtil.isNotEmpty(useTree) && useTree){
            return AjaxResult.success(iCuMemberRetailRegionService.getRegionTreeList(type, SecurityUtils.getUserId()));
        }else{
            return AjaxResult.success(iCuMemberRetailRegionService.getRegionList(type, SecurityUtils.getUserId()));
        }
    }

}
