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.CamsAccountBo;
import com.boco.nbd.wios.manage.entity.bo.CamsAccountVo;
import com.boco.nbd.wios.manage.entity.bo.CamsBaseAccountVo;
import com.boco.nbd.wios.manage.service.impl.CamsAccountService;
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.util.StringUtils;
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;
import java.util.stream.Collectors;

/**
 * cams账号相关接口
 *
 * @author xgl
 * @version [版本号, 2020年9月30日]
 */
@RestController
@RequestMapping("api")
@Api(tags = {"cams账号相关接口"})
@ApiIgnore
public class CamsAccountController {
    @Autowired
    private CamsAccountService camsAccountService;

    /**
     * 添加cams账号
     *
     * @param camsAccount
     * @return
     */
    @PostMapping(value = "camsAccount/add")
    @ApiOperation(value = "添加cams账号")
    @ApiImplicitParams({@ApiImplicitParam(name = "account", value = "账户", dataType = "String", paramType = "query", required = true),
            @ApiImplicitParam(name = "roleId", value = "角色id", dataType = "int", paramType = "query", required = true),
            @ApiImplicitParam(name = "userName", value = "用户姓名", dataType = "String", paramType = "query", required = true),
            @ApiImplicitParam(name = "departmentId", value = "部门id", dataType = "int", paramType = "query", required = true),
            @ApiImplicitParam(name = "regionId", value = "区域id", dataType = "String", paramType = "query", required = true),
            @ApiImplicitParam(name = "alarmId", value = "超时提醒id", dataType = "String", paramType = "query", required = true),
            @ApiImplicitParam(name = "email", value = "邮箱", dataType = "String", paramType = "query", required = true),

    })
    public BaseResponse<Object> add(CamsAccountBo camsAccount) {
        if (!StringUtils.isEmpty(camsAccount.getUserName()) && camsAccount.getUserName().length() > WiosConstant.MAX_USER_NAME_LENGTH) {
            throw new ServiceException("名字过长");
        }
        Assert.notNull(camsAccount.getRoleId(), "角色不能为空");
        camsAccountService.add(camsAccount);
        return new BaseResponse<>();
    }

    /**
     * 修改cams账号
     *
     * @param accountBo
     * @return
     */
    @PostMapping(value = "camsAccount/update")
    @ApiOperation(value = "修改cams账号")
    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "账户id", dataType = "int", paramType = "query", required = true),
            @ApiImplicitParam(name = "departmentId", value = "部门id", dataType = "int", paramType = "query", required = false),
            @ApiImplicitParam(name = "regionId", value = "区域id", dataType = "String", paramType = "query", required = false),
            @ApiImplicitParam(name = "alarmId", value = "超时提醒id", dataType = "String", paramType = "query", required = false),
            @ApiImplicitParam(name = "roleId", value = "角色id", dataType = "int", paramType = "query", required = false),
            @ApiImplicitParam(name = "status", value = "状态 1:正常 2:禁用 3:删除", dataType = "int", paramType = "query", required = false),
            @ApiImplicitParam(name = "email", value = "邮箱", dataType = "String", paramType = "query", required = true),})
    public BaseResponse<Object> update(CamsAccountBo accountBo) {
        if (accountBo.getId() == null) {
            throw new ServiceException(MessageConstant.MISSING_PARAM);
        }
        if (!StringUtils.isEmpty(accountBo.getUserName()) && accountBo.getUserName().length() > WiosConstant.MAX_USER_NAME_LENGTH) {
            throw new ServiceException("名字过长");
        }
        camsAccountService.update(accountBo.getId(), accountBo);
        return new BaseResponse<>();
    }

    /**
     * 查询列表
     *
     * @param account
     * @param userName
     * @return
     */
    @GetMapping(value = "camsAccount/list")
    @ApiOperation(value = "查询列表")
    @ApiImplicitParams({@ApiImplicitParam(name = "account", value = "登陆手机号", dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "userName", value = "用户姓名", dataType = "String", paramType = "query"),})
    public BaseResponse<Object> list(String account, String userName) {
        CamsAccountBo condition = new CamsAccountBo();
        condition.setAccount(account);
        condition.setUserName(userName);
        return new BaseResponse<>(camsAccountService.getList(condition));
    }


    @GetMapping(value = "camsAccount/select")
    @ApiOperation(value = "查询列表==>下拉使用list效率低下")
    public BaseResponse<Object> select() {
        CamsAccountBo condition = new CamsAccountBo();
        List<CamsAccountVo> data = camsAccountService.getList(condition);
        List<CamsBaseAccountVo> result = data.stream().map(s -> s.toBaseVo()).collect(Collectors.toList());
        return new BaseResponse<>(result);
    }

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