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.wios.manage.contants.WiosConstant;
import com.boco.nbd.wios.manage.entity.bo.MaterialConfig;
import com.boco.nbd.wios.manage.entity.bo.MaterialConfigBo;
import com.boco.nbd.wios.manage.entity.bo.MaterialConfigVo;
import com.boco.nbd.wios.manage.service.impl.MaterialConfigService;
import com.boco.nbd.wios.manage.util.CommonUtils;
import com.ihidea.component.api.v2.BaseResponse;
import com.ihidea.core.util.StringUtilsEx;
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.ArrayList;
import java.util.List;

/**
 * 资料维护管理接口
 * 
 * @author
 * @version
 */
@RestController
@RequestMapping("api")
@Api(tags = "资料维护管理接口")
@ApiIgnore
public class MaterialConfigController {
    @Autowired
    private MaterialConfigService materialConfigService;
    
    /**
     * 添加资料
     *
     * @param mc
     * @return
     */
    @PostMapping(value = "materialConfig/add")
    @ApiOperation(value = "添加资料")
    public BaseResponse<Object> add(MaterialConfig mc) {
        Assert.notNull(mc.getType(), "type不能为空");
        if (!StringUtils.isEmpty(mc.getContent())) {
            mc.setContent(StringUtilsEx.unescapeXss(mc.getContent()));
        }
        if (!StringUtils.isEmpty(mc.getContent()) && !mc.getContent().startsWith(CamsConstant.ANGLE_BRACKET)) {
            List<String> list = new ArrayList<>();
            String[] contentArr = mc.getContent().split(CamsConstant.COMMA);
            for (String c : contentArr) {
                list.add(WiosConstant.FILE_UPLOAD_DEFAULT_URL + c);
            }
            mc.setContent(StringUtils.collectionToCommaDelimitedString(list));
        }
        materialConfigService.add(mc);
        return new BaseResponse<>();
    }
    
    /**
     * 修改资料
     *
     * @param mc
     * @return
     */
    @PostMapping(value = "materialConfig/update")
    @ApiOperation(value = "修改资料")
    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "主键id", dataType = "int", paramType = "query", required = true),
        @ApiImplicitParam(name = "type", value = "类型", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(name = "content", value = "内容", dataType = "String", paramType = "query", required = false),})
    public BaseResponse<Object> update(MaterialConfig mc) {
        Assert.notNull(mc.getId(), WiosConstant.EMPTY_ID);
        if (!StringUtils.isEmpty(mc.getContent())) {
            mc.setContent(StringUtilsEx.unescapeXss(mc.getContent()));
        }
        if (!StringUtils.isEmpty(mc.getContent()) && !mc.getContent().startsWith(CamsConstant.ANGLE_BRACKET)) {
            List<String> list = new ArrayList<>();
            String[] contentArr = mc.getContent().split(CamsConstant.COMMA);
            for (String c : contentArr) {
                list.add(CommonUtils.urlHandle(c));
            }
            mc.setContent(StringUtils.collectionToCommaDelimitedString(list));
        }
        materialConfigService.update(mc.getId(), mc);
        return new BaseResponse<>();
    }
    /**
     * 删除资料
     *
     * @param mc
     * @return
     */
    @PostMapping(value = "materialConfig/delete")
    @ApiOperation(value = "修改资料")
    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "主键id", dataType = "int", paramType = "query", required = true),
            @ApiImplicitParam(name = "status", value = "状态", dataType = "int", paramType = "query", required = true),})
    public BaseResponse<Object> delete(MaterialConfigBo mc) {
        Assert.notNull(mc.getId(), WiosConstant.EMPTY_ID);
        Assert.notNull(mc.getStatus(), "status不能为空");
        materialConfigService.delete(mc.getId(), mc);
        return new BaseResponse<>();
    }
    /**
     * 查询资料列表
     *
     * @param oemName
     * @param regionId
     * @param type
     * @return
     */
    @GetMapping(value = "materialConfig/all")
    @ApiOperation(value = "查询资料列表")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "page", value = "一页显示数量", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(name = "pagecount", value = "页码", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(paramType = "query", name = "oemName", value = "主机厂名称", required = false, dataType = "String"),
        @ApiImplicitParam(paramType = "query", name = "regionId", value = "区域id", required = false, dataType = "int"),
        @ApiImplicitParam(paramType = "query", name = "type", value = "类型", required = false, dataType = "int"),
    })
    public BaseResponse<List<MaterialConfigVo>> getAll(String oemName, Integer regionId, Integer type) {
        MaterialConfigBo condition = new MaterialConfigBo();
        condition.setOemName(oemName);
        condition.setRegionId(regionId);
        condition.setType(type);
        return new BaseResponse<>(materialConfigService.getList(condition));
    }

    /**
     * 查寻资料明细
     *
     * @param mc
     * @return
     */
    @GetMapping(value = "materialConfig/detail")
    @ApiOperation(value = "查询资料明细")
    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "主键id", dataType = "int", paramType = "query", required = true),})
    public BaseResponse<MaterialConfigVo> detail(MaterialConfigBo mc) {
        Assert.notNull(mc.getId(), WiosConstant.EMPTY_ID);
        return new BaseResponse<>(materialConfigService.getDetail(mc));
    }
}