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

import cn.hutool.core.lang.Assert;
import com.boco.nbd.cams.core.constant.CamsConstant;
import com.boco.nbd.cams.core.constant.MessageConstant;
import com.boco.nbd.wios.manage.contants.WiosConstant;
import com.boco.nbd.wios.manage.entity.bo.SupplierBo;
import com.boco.nbd.wios.manage.service.impl.SupplierService;
import com.boco.nbd.wios.manage.util.CommonUtils;
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.*;
import springfox.documentation.annotations.ApiIgnore;

import java.util.ArrayList;
import java.util.List;

/**
 * 服务商管理接口
 *
 * @author
 */
@RestController
@RequestMapping("api")
@Api(tags = "服务商管理接口")
@ApiIgnore
public class SupplierController {

    @Autowired
    private SupplierService supplierService;

    /**
     * 查询服务商列表
     *
     * @param supplierBo
     * @return
     */
    @GetMapping(value = "supplier/list")
    @ApiOperation(value = "查询列表")
    @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "一页显示数量", dataType = "int", paramType = "query", required = false),
            @ApiImplicitParam(name = "pagecount", value = "页码", dataType = "int", paramType = "query", required = false),
            @ApiImplicitParam(name = "code", value = "编码", dataType = "String", paramType = "query", required = false),
            @ApiImplicitParam(name = "name", value = "名称", dataType = "String", paramType = "query", required = false),
            @ApiImplicitParam(name = "status", value = "状态 0禁用 1启用", dataType = "int", paramType = "query", required = false),
            @ApiImplicitParam(name = "contactName", value = "联系人姓名", dataType = "String", paramType = "query", required = false),
            @ApiImplicitParam(name = "contactPhone", value = "联系人手机", dataType = "String", paramType = "query", required = false),
            @ApiImplicitParam(name = "organizationCode", value = "组织机构代码", dataType = "String", paramType = "query", required = false),
            @ApiImplicitParam(name = "maxOrderQuantity", value = "日接单能力", dataType = "String", paramType = "query", required = false),
            @ApiImplicitParam(name = "checkStatus", value = "派单查询列表审核状态传1(0:未审核,1:审核通过,2:审核不通过)", dataType = "int", paramType = "query", required = false),
    })
    public BaseResponse<Object> list(SupplierBo supplierBo) {
        return new BaseResponse<>(supplierService.getList(supplierBo));
    }

    /**
     * 添加服务商
     *
     * @param supplierBo
     * @return
     */
    @PostMapping(value = "supplier/add")
    @ApiOperation(value = "添加")
    public BaseResponse<Object> add(SupplierBo supplierBo) {
        Assert.notNull(supplierBo.getName(), "缺少name");
        Assert.notNull(supplierBo.getCode(), "缺少code");
        Assert.notNull(supplierBo.getAccount(), "缺少account");

        //营业执照
        supplierBo.setBusinessLicense(getFilePaths(supplierBo.getBusinessLicense()));
        //安装资质
        supplierBo.setInstallLicense(getFilePaths(supplierBo.getInstallLicense()));
        //莱茵认证
        supplierBo.setTuvCert(getFilePaths(supplierBo.getTuvCert()));
        //安装工程一切责任险
        supplierBo.setInstallInsurance(getFilePaths(supplierBo.getInstallInsurance()));
        //雇主责任险
        supplierBo.setEmployerInsurance(getFilePaths(supplierBo.getEmployerInsurance()));

        supplierService.add(supplierBo);
        return new BaseResponse<>();
    }

    private String getFilePaths(String paths) {
        if (!StringUtils.isEmpty(paths)) {
            String[] arr = paths.split(CamsConstant.COMMA);
            List<String> fileList = new ArrayList<>();
            for (String str : arr) {
                fileList.add(CommonUtils.urlHandle(str));
            }
            return StringUtils.collectionToCommaDelimitedString(fileList);
        }
        return null;
    }

    /**
     * 批量添加
     *
     * @param supplierJson
     * @return
     */
    @PostMapping(value = "supplier/batchAdd")
    @ApiOperation(value = "批量添加")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "supplierJson", value = "json数据", dataType = "String", paramType = "query", required = true),})
    public BaseResponse<Object> batchAdd(String supplierJson) {
        Assert.notEmpty(supplierJson, MessageConstant.MISSING_PARAM);
        supplierService.batchAdd(supplierJson);
        return new BaseResponse<>();
    }

    /**
     * 更新服务商
     *
     * @param supplier
     * @return
     */
    @PostMapping(value = "supplier/update")
    @ApiOperation(value = "更新")
    public BaseResponse<Object> update(SupplierBo supplier) {
        //营业执照
        supplier.setBusinessLicense(getFilePaths(supplier.getBusinessLicense()));
        //安装资质
        supplier.setInstallLicense(getFilePaths(supplier.getInstallLicense()));
        //莱茵认证
        supplier.setTuvCert(getFilePaths(supplier.getTuvCert()));
        //安装工程一切责任险
        supplier.setInstallInsurance(getFilePaths(supplier.getInstallInsurance()));
        //雇主责任险
        supplier.setEmployerInsurance(getFilePaths(supplier.getEmployerInsurance()));
        supplierService.update(Integer.valueOf(supplier.getId()), supplier);
        return new BaseResponse<>();
    }

    /**
     * 更新账号
     *
     * @param accountId
     * @param account
     * @return
     */
    @PostMapping(value = "supplier/updateAccount")
    @ApiOperation(value = "更新账号")
    @ApiImplicitParams({@ApiImplicitParam(name = "accountId", value = "账号id", dataType = "int", paramType = "query", required = true),
            @ApiImplicitParam(name = "account", value = "登陆手机号", dataType = "String", paramType = "query", required = true),})
    public BaseResponse<Object> updateAccount(Integer accountId, String account) {
        if (StringUtils.isEmpty(account) || accountId == null) {
            throw new ServiceException(MessageConstant.MISSING_PARAM);
        }
        supplierService.updateAccount(accountId, account);
        return new BaseResponse<>();
    }

    /**
     * @return com.ihidea.component.api.v2.BaseResponse<java.lang.Object>
     * @Description 审核新建的安装服务商
     * @Param [id, checkStatus, checkRemark]
     * @author liwenxiang
     * @date 2021/7/27 13:33
     */
    @PostMapping(value = "supplier/checkSupplier")
    @ApiOperation(value = "审核新建的安装服务商")
    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "安装服务商id", dataType = "int", paramType = "query", required = true),
            @ApiImplicitParam(name = "checkStatus", value = "审核状态:1:审核通过,2:审核不通过", dataType = "int", paramType = "query", required = true),
            @ApiImplicitParam(name = "checkRemark", value = "审核备注", dataType = "String", paramType = "query", required = false)})
    public BaseResponse<Object> checkSupplier(Integer id, Integer checkStatus, String checkRemark) {
        supplierService.checkSupplier(id, checkStatus, checkRemark);
        return new BaseResponse<>();
    }

    /**
     * @return com.ihidea.component.api.v2.BaseResponse<java.lang.Object>
     * @Description 查询服务商自动派单配置
     * @Param [id]
     * @author liwenxiang
     * @date 2021/8/20 10:07
     */
    @GetMapping(value = "supplier/getDispatchConfig")
    @ApiOperation(value = "查询服务商自动派单配置")
    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "安装服务商id", dataType = "int", paramType = "query", required = true)})
    public BaseResponse<Object> getDispatchConfig(Integer id) {
        return new BaseResponse<>(supplierService.getDispatchConfig(id));
    }

    /**
     * @return com.ihidea.component.api.v2.BaseResponse<java.lang.Object>
     * @Description 新增/修改服务商自动派单配置
     * @Param [supplierId, jsonStr]
     * @author liwenxiang
     * @date 2021/8/20 14:11
     */
    @PostMapping(value = "supplier/updateDispatchConfig")
    @ApiOperation(value = "新增/修改服务商自动派单配置")
    @ApiImplicitParams({@ApiImplicitParam(name = "supplierId", value = "服务商id", dataType = "String", paramType = "query", required = true),
            @ApiImplicitParam(name = "id", value = "主键id", dataType = "String", paramType = "query", required = true),
            @ApiImplicitParam(name = "regionId", value = "地区id", dataType = "int", paramType = "query", required = true),
            @ApiImplicitParam(name = "dispatchNum", value = "派单数量", dataType = "int", paramType = "query", required = true)})
    public BaseResponse<Object> updateDispatchConfig(String supplierId, String jsonStr) {
        supplierService.updateDispatchConfig(supplierId, jsonStr);
        return new BaseResponse<>();
    }

}