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

import cn.hutool.core.lang.Assert;
import com.boco.nbd.wios.manage.contants.WiosConstant;
import com.boco.nbd.wios.manage.entity.bo.*;
import com.boco.nbd.wios.manage.service.impl.OemContractService;
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;

/**
 * 主机厂合同接口
 *
 * @author
 */
@RestController
@RequestMapping("api")
@Api(tags = "主机厂合同接口管理接口")
@ApiIgnore
public class OemContractController {
    @Autowired
    private OemContractService oemContractService;

    /**
     * 添加合同数据
     *
     * @param contractBo
     */
    @PostMapping(value = "oemContract/add")
    @ApiOperation(value = "添加合同数据")
    public BaseResponse<Object> add(OemContractBo contractBo) {
        if (contractBo.getStartTime() == null || contractBo.getEndTime() == null) {
            throw new ServiceException("缺少日期");
        }
        if (StringUtils.isEmpty(contractBo.getOemId())) {
            throw new ServiceException("缺少主机厂id");
        }
        oemContractService.add(contractBo);
        return new BaseResponse<>();
    }

    /**
     * 更新合同数据
     *
     * @param contractBo
     */
    @PostMapping(value = "oemContract/update")
    @ApiOperation(value = "更新合同数据")
    public BaseResponse<Object> update(OemContractBo contractBo) {
        Assert.notNull(contractBo.getId(), "缺少id");
        oemContractService.update(contractBo);
        return new BaseResponse<>();
    }

    /**
     * 查询列表
     *
     * @param oemContract
     * @return
     */
    @GetMapping(value = "oemContract/list")
    @ApiOperation(value = "查询合同列表")
    @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "一页显示数量", dataType = "int", paramType = "query", required = false),
            @ApiImplicitParam(name = "pagecount", value = "页码", dataType = "int", paramType = "query", required = false),})
    public BaseResponse<List<OemContractVo>> list(OemContractBo2 oemContract) {
        return new BaseResponse<>(oemContractService.getList(oemContract));
    }

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

    /**
     * 根据主机厂id查询合同详情
     *
     * @param oemId
     * @return
     */
    @GetMapping(value = "oemContract/detailByOemId")
    @ApiOperation(value = "根据主机厂id查询合同详情")
    @ApiImplicitParams({@ApiImplicitParam(name = "oemId", value = "主机厂id", dataType = "int", paramType = "query", required = true)})
    public BaseResponse<OemContractVo> detailByOemId(Integer oemId) {
        Assert.notNull(oemId, "oemId不能为空");
        return new BaseResponse<>(oemContractService.getDetailByOemId(oemId));
    }

    @GetMapping(value = "oemContract/getSupplierInstallDevice")
    @ApiOperation(value = "根据主机厂和墙盒类型查询安装设备详情")
    @ApiImplicitParams({@ApiImplicitParam(name = "oemId", value = "主机厂id", dataType = "int", paramType = "query", required = true),
            @ApiImplicitParam(name = "packType", value = "墙盒型号", dataType = "String", paramType = "query", required = true)})
    public BaseResponse<List<OemContractItemVo>> getSupplierInstallDevice(Integer oemId, String packType) {
        Assert.notNull(oemId, "oemId不能为空");
        Assert.notNull(packType, "packType不能为空");
        return new BaseResponse<>(oemContractService.getSupplierInstallDevice(oemId, packType));
    }

    /**
     * 根据主机厂id查询合同
     *
     * @param oemId
     * @return
     */
    @GetMapping(value = "oemContract/simpleByOemId")
    @ApiOperation(value = "根据主机厂id查询合同详情")
    @ApiImplicitParams({@ApiImplicitParam(name = "oemId", value = "主机厂id", dataType = "int", paramType = "query", required = true)})
    public BaseResponse<List<OemContract>> simpleByOemId(Integer oemId) {
        Assert.notNull(oemId, "oemId不能为空");
        return new BaseResponse<>(oemContractService.getSimpleContractByOemId(oemId));
    }
}