package cn.cslg.pas.controller;

import cn.cslg.pas.common.JsonPage;
import cn.cslg.pas.common.core.base.Constants;
import cn.cslg.pas.common.model.dto.*;
import cn.cslg.pas.common.model.vo.ProductCategoryTrendVO;
import cn.cslg.pas.common.utils.Response;
import cn.cslg.pas.exception.XiaoShiException;
import cn.cslg.pas.service.IProductCategoryService;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 产品类别的Controller层
 *
 * @Author chenyu
 * @Date 2023/3/7
 */
@Tag(name = "产品类别管理模块")
@RequiredArgsConstructor
@Slf4j
@RequestMapping(Constants.API_VERSION_V2 + "/productCategorys")
@RestController
public class ProductCategoryController {
    private final IProductCategoryService productCategoryService;

    @Operation(summary = "新增产品类别")
    @PostMapping("/addNew")
    public String addNew(String jsons, List<MultipartFile> files) {
        if (jsons != null) {
            ProductCategoryAddNewDTO productCategoryAddNewDTO = JSONObject.parseObject(jsons, ProductCategoryAddNewDTO.class);
            log.info("开始处理【新增产品类别】的请求，请求参数为：{}, {}", productCategoryAddNewDTO, files);
            try {
                productCategoryService.addNew(productCategoryAddNewDTO, files);
            } catch (XiaoShiException e) {
                return Response.error(e.getMessage());
            }
            return Response.success("新增产品类别完成");
        }
        return Response.error("无请求参数");
    }

    @Operation(summary = "分页查询产品类别")
    @PostMapping("/query")
    public String query(@RequestBody ProductCategoryQueryPageDTO productCategoryQueryPageDTO) {
        log.info("开始处理【分页查询产品类别】的请求，请求参数为：{}", productCategoryQueryPageDTO);
        JsonPage jsonPage = productCategoryService.query(productCategoryQueryPageDTO);
        return Response.success(jsonPage);
    }

    @Operation(summary = "修改产品类别")
    @PostMapping("/update")
    public String update(String jsons, List<MultipartFile> files) {
        if (jsons != null) {
            ProductCategoryUpdateDTO productCategoryUpdateDTO = JSONObject.parseObject(jsons, ProductCategoryUpdateDTO.class);
            log.info("开始处理【修改产品类别】的请求，请求参数为：{}, {}", productCategoryUpdateDTO, files);
            try {
                productCategoryService.update(productCategoryUpdateDTO, files);
            } catch (XiaoShiException e) {
                return Response.error(e.getMessage());
            }
            return Response.success("修改产品类别完成");
        }
        return Response.error("请求参数为null");
    }

    @Operation(summary = "删除产品类别")
    @GetMapping("/delete")
    public String delete(Integer id) {
        log.info("开始处理【删除产品类别】的业务，参数为：{}", id);
        try {
            productCategoryService.delete(id);
        } catch (XiaoShiException e) {
            return Response.error(e.getMessage());
        }
        return Response.success("删除产品类别完成");
    }

    @Operation(summary = "查询产品架构趋势图")
    @PostMapping("/showTrend")
    public String showTrend(@RequestBody ProductCategoryDTO dto) {
        List<ProductCategoryTrendVO> queryResult = productCategoryService.showTrend(dto);
        if (queryResult != null) {
            return Response.success(queryResult);
        } else {
            return Response.error("查询失败");
        }
    }

    @Operation(summary = "获得架构的地区集合")
    @PostMapping("/getAreaList")
    public String getAreaList(@RequestBody GetAreaListDTO dto) {
        return Response.success(productCategoryService.getAreaList(dto));
    }

    @Operation(summary = "获得架构的公司集合")
    @GetMapping("/getCompanyList")
    public String getCompanyList(Integer id) {
        return Response.success(productCategoryService.getCompanyList(id));
    }
}
