package com.boco.nbd.wios.manage.controller;

import cn.hutool.core.lang.Assert;
import com.boco.nbd.cams.core.constant.MessageConstant;
import com.boco.nbd.wios.manage.contants.WiosConstant;
import com.boco.nbd.wios.manage.entity.bo.Department;
import com.boco.nbd.wios.manage.entity.bo.DepartmentVo;
import com.boco.nbd.wios.manage.service.impl.DepartmentService;
import com.ihidea.component.api.v2.BaseResponse;
import com.ihidea.core.support.exception.ServiceException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;

import java.util.List;

/**
 * 部门管理接口
 *
 * @author xgl
 * @version [版本号, 2020年9月24日]
 */
@RestController
@RequestMapping("api")
@Api(tags = "部门管理接口")
@ApiIgnore
public class DepartmentController {
    @Autowired
    private DepartmentService departmentService;

    /**
     * 添加部门
     *
     * @param dept
     * @return
     */
    @PostMapping(value = "department/add")
    @ApiOperation(value = "添加部门信息")
    public BaseResponse<Object> add(Department dept) {
        if (dept.getParentId() == null) {
            throw new ServiceException(MessageConstant.MISSING_PARAM);
        }
        departmentService.add(dept);
        return new BaseResponse<>();
    }

    /**
     * 更新部门信息
     *
     * @param dept
     * @return
     */
    @PostMapping(value = "department/update")
    @ApiOperation(value = "更新部门信息")
    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "主键id", dataType = "int", paramType = "query", required = true),
        @ApiImplicitParam(name = "status", value = "1:正常 2:删除", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(name = "parentId", value = "上级部门id", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(name = "name", value = "名称", dataType = "String", paramType = "query", required = false),})
    public BaseResponse<Object> update(Department dept) {
        if (dept.getId() == 1) {
            throw new ServiceException("此数据不可修改");
        }
        departmentService.update(dept.getId(), dept);
        return new BaseResponse<>();
    }

    /**
     * 查询部门列表
     *
     * @param status
     * @return
     */
    @GetMapping(value = "department/all")
    @ApiOperation(value = "查询部门列表")
    @ApiImplicitParams({@ApiImplicitParam(paramType = "query", name = "status", value = "状态", required = false, dataType = "int"),})
    public BaseResponse<List<DepartmentVo>> getAll(Integer status) {
        return new BaseResponse<>(departmentService.getList(status));
    }

    /**
     * 查询部门详情
     *
     * @param id
     * @return
     */
    @GetMapping(value = "department/detail")
    @ApiOperation(value = "查询部门详情")
    @ApiImplicitParams({@ApiImplicitParam(paramType = "query", name = "id", value = "部门id", required = true, dataType = "int"),})
    public BaseResponse<DepartmentVo> getDetail(Integer id) {
        Assert.notNull(id, WiosConstant.EMPTY_ID);
        DepartmentVo dept = departmentService.getById(id);
        return new BaseResponse<>(dept);
    }
}