package com.energy.manage.service.controller.units;


import cn.hutool.core.bean.BeanUtil;
import com.energy.manage.common.base.Page;
import com.energy.manage.common.enums.IdPrefixEnum;
import com.energy.manage.common.reponse.ResultResp;
import com.energy.manage.service.config.annotations.UserLoginToken;
import com.energy.manage.service.controller.base.BaseServiceController;
import com.energy.manage.service.domain.dto.units.*;
import com.energy.manage.service.domain.dto.windenginegroup.WindEngineGroupCreateDto;
import com.energy.manage.service.domain.vo.units.UnitDictBrandModelVo;
import com.energy.manage.service.domain.vo.units.UnitDictConstantsVo;
import com.energy.manage.service.service.units.UnitDictConstantsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@Slf4j
@RestController
@CrossOrigin
@Api(value = "UnitDictController", tags = "风机部件字典管理")
@RequestMapping(value = "/api/unit/dict")
public class UnitDictController extends BaseServiceController {


    @Autowired
    private UnitDictConstantsService unitDictConstantsService;


    @UserLoginToken
    @PostMapping(value = "/createUnitDict")
    @ApiOperation(value = "创建数据字典")
    public ResultResp createUnitDict(@RequestBody @Valid UnitDictConstantsDto unitDictConstantsDto) {
        if (unitDictConstantsDto.getParentId() != 0) {
            return ResultResp.FAIL("数据字典级别不对");
        }

        if(unitDictConstantsService.verifyUnitDictModel(unitDictConstantsDto)){
            return ResultResp.FAIL("此类型部件已经存在！");
        }
        unitDictConstantsDto.setCreateBy(getUserId());
        unitDictConstantsDto.setUpdateBy(getUserId());
        boolean flg = unitDictConstantsService.saveUnitDict(unitDictConstantsDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }


    @UserLoginToken
    @PostMapping(value = "/updateUnitDict")
    @ApiOperation(value = "更新数据字典")
    public ResultResp updateUnitDict(@RequestBody @Valid UnitDictConstantsUpdateDto unitDictConstantsUpdateDto) {
        unitDictConstantsUpdateDto.setUpdateBy(getUserId());
        boolean flg = unitDictConstantsService.updateUnitDict(unitDictConstantsUpdateDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }


    @UserLoginToken
    @PostMapping(value = "/delUnitDict")
    @ApiOperation(value = "删除数据字典")
    public ResultResp delUnitDict(@RequestBody @Valid UnitDictConstantsDelDto unitDictConstantsDelDto) {
        unitDictConstantsDelDto.setUpdateBy(getUserId());
        boolean flg = unitDictConstantsService.delUnitDict(unitDictConstantsDelDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }


    @UserLoginToken
    @PostMapping(value = "/getUnitDictConstantsPage")
    @ApiOperation(value = "部件字典分页列表，通过字典名称询")
    public ResultResp<Page<UnitDictConstantsVo>> getUnitDictConstantsPage(@RequestBody @Valid UnitDictConstantsPageDto unitDictConstantsPageDto) {
        Page<UnitDictConstantsVo> page = unitDictConstantsService.getUnitDictConstantsPage(unitDictConstantsPageDto);
        return ResultResp.SUCCESS(page);
    }


    @UserLoginToken
    @PostMapping(value = "/createUnitDictProperty")
    @ApiOperation(value = "创建数据字典属性-常规类型")
    public ResultResp createUnitDictProperty(@RequestBody @Valid UnitDictConstantsDto unitDictConstantsDto) {
        if (unitDictConstantsDto.getParentId() <= 0) {
            return ResultResp.FAIL("数据字典级别不对");
        }
        if (StringUtils.isEmpty(unitDictConstantsDto.getContentsType())) {
            return ResultResp.FAIL("父级类型编号不能为空");
        }
        unitDictConstantsDto.setCreateBy(getUserId());
        unitDictConstantsDto.setUpdateBy(getUserId());
        unitDictConstantsDto.setContentsDictKey(0);
        unitDictConstantsDto.setContentsDescribe("属性");
        boolean flg = unitDictConstantsService.saveUnitDictProperty(unitDictConstantsDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }


    @UserLoginToken
    @PostMapping(value = "/delUnitDictProperty")
    @ApiOperation(value = "删除字典属性-常规类型")
    public ResultResp delUnitDictProperty(@RequestBody @Valid UnitDictConstantsPDelDto unitDictConstantsPDelDto) {
        unitDictConstantsPDelDto.setUpdateBy(getUserId());
        boolean flg = unitDictConstantsService.delUnitDictProperty(unitDictConstantsPDelDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }


    @UserLoginToken
    @PostMapping(value = "/updateUnitDictProperty")
    @ApiOperation(value = "更新字典属性-常规类型")
    public ResultResp updateUnitDictProperty(@RequestBody @Valid UnitDictConstantsUpdateDto unitDictConstantsUpdateDto) {
        unitDictConstantsUpdateDto.setUpdateBy(getUserId());
        boolean flg = unitDictConstantsService.updateUnitDictProperty(unitDictConstantsUpdateDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }


    @UserLoginToken
    @PostMapping(value = "/getUnitDictConstantsList")
    @ApiOperation(value = "查询字典属性集合-常规类型")
    public ResultResp<List<UnitDictConstantsVo>> getUnitDictConstantsList(@RequestBody @Valid UnitDictConstantsListDto unitDictConstantsListDto) {
        List<UnitDictConstantsVo> list = unitDictConstantsService.getUnitDictConstantsList(unitDictConstantsListDto.getContentsType());
        return ResultResp.SUCCESS(list);
    }


    @UserLoginToken
    @PostMapping(value = "/getUnitDictConstants")
    @ApiOperation(value = "查询字典属性对象-品牌型号")
    public ResultResp<UnitDictConstantsVo> getUnitDictConstants(@RequestBody @Valid UnitDictConstantsUpdateDto unitDictConstantsUpdateDto) {
        UnitDictConstantsVo vo = unitDictConstantsService.getUnitDictConstants(unitDictConstantsUpdateDto.getId());
        return ResultResp.SUCCESS(vo);
    }


    @UserLoginToken
    @PostMapping(value = "/saveUnitDictBrandModel")
    @ApiOperation(value = "创建部件品牌型号-品牌型号")
    public ResultResp saveUnitDictBrandModel(@RequestBody @Valid UnitDictBrandModelDto unitDictBrandModelDto) {

        if(StringUtils.isEmpty(unitDictBrandModelDto.getManufacture())
                || StringUtils.isEmpty(unitDictBrandModelDto.getModelNumber())){
            return ResultResp.NOTNULLPARAM();
        }
        if(unitDictConstantsService.verifyUnitDictBrandModel(unitDictBrandModelDto)){
            return ResultResp.FAIL("品牌型号已经存在!");
        }
        boolean flg = unitDictConstantsService.saveUnitDictBrandModel(unitDictBrandModelDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }


    @UserLoginToken
    @PostMapping(value = "/updateUnitDictBrandModel")
    @ApiOperation(value = "更新部件品牌型号-品牌型号")
    public ResultResp updateUnitDictBrandModel(@RequestBody @Valid UnitDictBrandModelUpdateDto unitDictBrandModelUpdateDto) {
        if(StringUtils.isEmpty(unitDictBrandModelUpdateDto.getManufacture())
                || StringUtils.isEmpty(unitDictBrandModelUpdateDto.getModelNumber())){
            return ResultResp.NOTNULLPARAM();
        }

        UnitDictBrandModelDto dto = new UnitDictBrandModelDto();
        BeanUtil.copyProperties(unitDictBrandModelUpdateDto,dto);

        if(unitDictConstantsService.verifyUnitDictBrandModel(dto)){
            return ResultResp.FAIL("品牌型号已经存在!");
        }
        boolean flg = unitDictConstantsService.updateUnitDictBrandModel(unitDictBrandModelUpdateDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }


    @UserLoginToken
    @PostMapping(value = "/updateUnitDictBrandModelParameter")
    @ApiOperation(value = "更新部件品牌型号-参数")
    public ResultResp updateUnitDictBrandModelParameter(@RequestBody @Valid UnitDictBrandModelParameterUpdateDto unitDictBrandModelParameterUpdateDto) {
        boolean flg = unitDictConstantsService.updateUnitDictBrandParameterModel(unitDictBrandModelParameterUpdateDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }

    @UserLoginToken
    @PostMapping(value = "/delUnitDictBrandModel")
    @ApiOperation(value = "删除部件品牌型号-品牌型号")
    public ResultResp delUnitDictBrandModel(@RequestBody @Valid UnitDictBrandModelIdDto unitDictBrandModelIdDto) {
        boolean flg = unitDictConstantsService.delUnitDictBrandModel(unitDictBrandModelIdDto);
        return flg ? ResultResp.SUCCESS() : ResultResp.FAIL();
    }


    @UserLoginToken
    @PostMapping(value = "/getUnitDictBrandModelPage")
    @ApiOperation(value = "查询品牌型号分页查询-品牌型号")
    public ResultResp<Page<UnitDictBrandModelVo>> getUnitDictBrandModelPage(@RequestBody @Valid UnitDictBrandModelPageDto unitDictBrandModelPageDto) {
        Page<UnitDictBrandModelVo> page = unitDictConstantsService.getUnitDictBrandModelPage(unitDictBrandModelPageDto);
        return ResultResp.SUCCESS(page);
    }







}
