package org.jeecg.modules.apiService.impl;

import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.apiBean.PageBean;
import org.jeecg.modules.apiService.ConfigService;
import org.jeecg.modules.carrentCategoryone.entity.CarrentCategoryone;
import org.jeecg.modules.carrentCategoryone.service.ICarrentCategoryoneService;
import org.jeecg.modules.carrentCategorytwo.entity.CarrentCategorytwo;
import org.jeecg.modules.carrentCategorytwo.service.ICarrentCategorytwoService;
import org.jeecg.modules.carrentConfig.entity.CarrentConfig;
import org.jeecg.modules.carrentConfig.service.ICarrentConfigService;
import org.jeecg.modules.carrentMileage.entity.CarrentMileage;
import org.jeecg.modules.carrentMileage.service.ICarrentMileageService;
import org.jeecg.modules.carrentOrder.entity.CarrentOrder;
import org.jeecg.modules.carrentType.entity.CarrentType;
import org.jeecg.modules.carrentType.service.ICarrentTypeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Service
public class ConfigServiceImpl implements ConfigService {

    /*************************************************************************************/
    //公里数信息
    @Resource
    private ICarrentMileageService carrentMileageService;

    //商品类型
    @Resource
    private ICarrentTypeService carrentTypeService;

    //商品一级分类
    @Resource
    private ICarrentCategoryoneService carrentCategoryoneService;

    //商品二级分类
    @Resource
    private ICarrentCategorytwoService carrentCategorytwoService;

    //商品二级分类
    @Resource
    private ICarrentConfigService carrentConfigService;
    /*************************************************************************************/

    //配置信息-获取商品类型列表
    @Override
    public Result<?> queryTypeList(PageBean pageBean) {
        //返回信息
        String message = "商品类型列表查询失败!";
        //商品类型列表
        Page<CarrentType> pageList = null;

        try{
            //分页
            Page<CarrentType> page = new Page<CarrentType>(pageBean.getPageNo(), pageBean.getPageSize());
            //获取商品类型列表
            pageList = carrentTypeService
                    .lambdaQuery()
                    .page(page);

            //判断执行结果
            if(null != pageList){
                message = "商品类型列表信息";
            }else {
                message = "商品类型列表为空";
            }

            //返回执行结果
            return Result.OK(message, pageList);
        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return Result.error(message, pageList);
        }

    }

    //配置信息-获取商品分类列表
    @Override
    public Result<?> queryCatogoryList(String categoryOneId) {
        //返回信息
        String message = "商品分类列表查询失败!";

        try{
            //一级分类列表
            List<CarrentCategoryone> carrentCategoryoneList = getCatogoryOneList(categoryOneId);
            //二级分类列表
            List<CarrentCategorytwo> carrentCategorytwoList = getCatogoryTwoList();

            //将二级分类放至对应一级分类下
            for (CarrentCategoryone carrentCategoryone : carrentCategoryoneList) {
                //二级分类列表
                List<CarrentCategorytwo> carrentCategorytwos = new ArrayList<>();
                for (CarrentCategorytwo carrentCategorytwo : carrentCategorytwoList) {
                    //判断二级分类是否属于当前一级分类
                    if(carrentCategoryone.getId().equals(carrentCategorytwo.getCategoryoneId())){
                        carrentCategorytwos.add(carrentCategorytwo);
                    }
                }
                //将二级分类列表放至对应一级分类对象中
                carrentCategoryone.setCarrentCategorytwoList(carrentCategorytwos);
                message = "商品分类列表信息";
            }

            return Result.OK(message, carrentCategoryoneList);

        }catch (Exception e){
            e.printStackTrace();
            return Result.error(message);
        }

    }

    //配置信息-获取商品一级分类列表
    @Override
    public Result<?> queryCatogoryOneList(PageBean pageBean) {
        //返回信息
        String message = "商品一级分类列表查询失败!";
        //商品一级分类列表
        Page<CarrentCategoryone> pageList = null;

        try{
            //分页
            Page<CarrentCategoryone> page = new Page<CarrentCategoryone>(pageBean.getPageNo(), pageBean.getPageSize());
            //获取商品一级分类列表
            pageList = carrentCategoryoneService
                    .lambdaQuery()
                    .page(page);

            //判断执行结果
            if(null != pageList){
                message = "商品一级分类列表信息";
            }else {
                message = "商品一级分类列表为空";
            }

            //返回执行结果
            return Result.OK(message, pageList);
        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return Result.error(message, pageList);
        }

    }

    //配置信息-获取商品二级分类列表
    @Override
    public Result<?> queryCatogoryTwoList(PageBean pageBean) {
        //返回信息
        String message = "商品二级分类列表查询失败!";
        //商品一级分类列表
        Page<CarrentCategorytwo> pageList = null;

        try{
            //分页
            Page<CarrentCategorytwo> page = new Page<CarrentCategorytwo>(pageBean.getPageNo(), pageBean.getPageSize());
            //获取商品二级分类列表
            pageList = carrentCategorytwoService
                    .lambdaQuery()
                    .page(page);

            //判断执行结果
            if(null != pageList){
                message = "商品二级分类列表信息";
            }else {
                message = "商品二级分类列表为空";
            }

            //返回执行结果
            return Result.OK(message, pageList);
        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return Result.error(message, pageList);
        }

    }

    //配置信息-获取商品二级分类列表
    @Override
    public Result<?> queryMileageList() {
        //返回信息
        String message = "公里数列表查询失败!";
        //公里数列表
        List<CarrentMileage> mileageList = new ArrayList<>();

        try{

            mileageList = carrentMileageService
                    .lambdaQuery()
                    .orderByAsc(CarrentMileage::getMileage)
                    .list();
            message = "公里数列表";
            //返回执行结果
            return Result.OK(message, mileageList);
        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return Result.error(message, mileageList);
        }

    }

    //获取隐私政策
    @Override
    public Result<?> queryPrivacy() {
        return getParamValue("config_privacy");
    }

    //获取用户协议
    @Override
    public Result<?> queryAgreement() {
        return getParamValue("config_agreement");
    }

    //获取在线客服电话
    @Override
    public Result<?> queryPhone() {
        return getParamValue("config_phone");
    }

    //获取关于我们
    @Override
    public Result<?> queryAboutus() {
        return getParamValue("config_aboutus");
    }

    /*****************************************************************************************************************/
    //获取一级分类列表信息
    public List<CarrentCategoryone> getCatogoryOneList(String categoryOneId) {
        //返回信息
        String message = "商品一级分类列表查询失败!";

        try{
            //组装查询内容
            LambdaQueryChainWrapper<CarrentCategoryone> query = carrentCategoryoneService
                    .lambdaQuery();

            //组装查询条件
            if(null != categoryOneId){
                //车辆类型
                query.eq(CarrentCategoryone::getId, categoryOneId);
            }
            //获取商品类型列表
            List<CarrentCategoryone> pageList = query.list();

            //判断执行结果
            if(null != pageList){
                message = "商品一级分类列表信息";
            }else {
                message = "商品一级分类列表为空";
            }

            //返回执行结果
            return pageList;
        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return null;
        }

    }

    //获取二级分类列表信息
    public List<CarrentCategorytwo> getCatogoryTwoList() {
        //返回信息
        String message = "商品二级分类列表查询失败!";

        try{
            //获取商品类型列表
            List<CarrentCategorytwo> pageList = carrentCategorytwoService
                    .lambdaQuery()
                    .list();

            //判断执行结果
            if(null != pageList){
                message = "商品二级分类列表信息";
            }else {
                message = "商品二级分类列表为空";
            }

            //返回执行结果
            return pageList;
        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return null;
        }

    }

    //获取系统配置信息
    public Result<?> getParamValue(String paramCode) {
        //返回信息
        String message = "系统配置信息查询失败!";

        try{
            //获取商品类型列表
            CarrentConfig one = carrentConfigService
                    .lambdaQuery()
                    .eq(CarrentConfig::getParamCode, paramCode)
                    .one();

            //判断执行结果
            if(null != one){
                message = "系统配置信息";
            }else {
                message = "系统配置信息为空";
            }

            //返回执行结果
            return Result.OK(message, one);
        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return Result.error(message);
        }

    }


}
