package com.foreverwin.mesnac.equip.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.foreverwin.mesnac.common.enums.HandleEnum;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.util.CommonMethods;
import com.foreverwin.modular.core.util.R;
import com.foreverwin.mesnac.equip.model.Equip;
import com.foreverwin.mesnac.equip.model.EquipType;
import com.foreverwin.mesnac.equip.model.EquipTypeEquip;
import com.foreverwin.mesnac.equip.service.EquipTypeEquipService;
import com.foreverwin.mesnac.equip.service.EquipTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

/**
 *
 * @author Max
 * @since 2020-10-10
 */
@RestController
@RequestMapping("/Z-EQUIP-TYPE")
public class EquipTypeController {

    @Autowired
    public EquipTypeService equipTypeService;
    @Autowired
    public EquipTypeEquipService equipTypeEquipService;

    /**
    * 根据设备类型查询
    * @return
    */
    @ResponseBody
    @GetMapping("/search/{equipType}")
    public R getEquipTypeById(@PathVariable("equipType") String equipType) {
        String site = CommonMethods.getSite();
        String handle = HandleEnum.RESOURCE_TYPE.getHandle(site,equipType);
        EquipType _equipType = equipTypeService.getById( handle );
        if ( _equipType == null ) {
            return R.failed( null,"设备类型不存在" );
        }
        return R.ok( _equipType,"检索成功" );
    }

    /**
     * 设备类型弹出框
     * @return
     */
    @ResponseBody
    @GetMapping("")
    public R getEquipTypeList(EquipType equipType){
        String site = CommonMethods.getSite();
        equipType.setSite( site );
        List<EquipType> result;
        QueryWrapper<EquipType> queryWrapper = new QueryWrapper<>();
        queryWrapper.setEntity(equipType);
        result = equipTypeService.list( queryWrapper );
        return R.ok( result );
    }

    /**
     * 通过设备检验设备类型是否存在
     * @return
     */
    @ResponseBody
    @GetMapping("/equip")
    public R getEquipTypeByEquip(Equip equip){
        String site = CommonMethods.getSite();
        String resource = equip.getResrce();
        String resourceBo = HandleEnum.RESOURCE.getHandle(site,resource);

        EquipTypeEquip equipTypeEquip = new EquipTypeEquip();
        equipTypeEquip.setEquipBo( resourceBo );
        QueryWrapper<EquipTypeEquip> queryWrapper = new QueryWrapper<>();
        queryWrapper.setEntity( equipTypeEquip );
        EquipTypeEquip _equipTypeEquip = equipTypeEquipService.getOne( queryWrapper );
        if ( _equipTypeEquip == null ) {
            return R.failed(null,"当前设备["+resource+"]未维护设备类型");
        }
        return R.ok(  _equipTypeEquip);
    }

    /**
     * 保存
     */
    @ResponseBody
    @PostMapping("/save")
    public R save(@RequestBody EquipType equipType) {
        String site = CommonMethods.getSite();
        String _handle = equipType.getHandle();
        String equipTypeName = equipType.getEquipType();
        String handle = HandleEnum.RESOURCE_TYPE.getHandle(site,equipTypeName);
        equipType.setHandle( handle );
        equipType.setSite( site );
        equipType.setCreatedDateTime( new Date() );
        equipType.setModifiedDateTime( new Date() );
        //判断是更新还是新增 2020/12/01
        EquipType et =equipTypeService.getById( handle );
        if (  et != null && !et.getHandle().equals(_handle) ) {
            throw BusinessException.build(equipTypeName+" 已存在，请先检索");
        }
        return R.ok( equipTypeService.saveOrUpdate(equipType),"保存成功" );
    }

    /**
     * 删除
     * @return
     */
    @ResponseBody
    @GetMapping("/remove/{equipType}")
    public R removeById(@PathVariable("equipType") String equipType) {
        String site = CommonMethods.getSite();
        String handle = HandleEnum.RESOURCE_TYPE.getHandle(site,equipType);
        //删除与设备的关系
        QueryWrapper<EquipTypeEquip> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("EQUIP_TYPE_BO",handle );
        equipTypeEquipService.remove( queryWrapper );
        //删除设备类型
        return R.ok( equipTypeService.removeById( handle ),"删除成功" );
    }
}