package com.zt.plat.module.api;

import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.api.dto.unitconversion.*;
import com.zt.plat.module.base.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import jakarta.validation.Valid;

/**
 * 单位转换 Feign API
 * 提供给其他服务远程调用的单位转换接口
 *
 * @author ZT
 */
@FeignClient(name = ApiConstants.NAME)
@Tag(name = "RPC 服务 - 单位转换")
public interface UnitConversionApi {

    String PREFIX = ApiConstants.PREFIX + "/unit-management/unit-conversion";

    /**
     * 按ID转换单位
     *
     * @param reqDTO 转换请求参数
     * @return 转换结果
     */
    @PostMapping(PREFIX + "/convert")
    @Operation(summary = "按ID转换单位")
    CommonResult<UnitConvertRespDTO> convert(@Valid @RequestBody UnitConvertReqDTO reqDTO);

    /**
     * 按符号转换单位
     *
     * @param reqDTO 转换请求参数(包含单位符号)
     * @return 转换结果
     */
    @PostMapping(PREFIX + "/convert-by-symbol")
    @Operation(summary = "按符号转换单位")
    CommonResult<UnitConvertRespDTO> convertBySymbol(@Valid @RequestBody UnitConvertBySymbolReqDTO reqDTO);

    /**
     * 按名称转换单位
     *
     * @param reqDTO 转换请求参数(包含单位名称)
     * @return 转换结果
     */
    @PostMapping(PREFIX + "/convert-by-name")
    @Operation(summary = "按名称转换单位")
    CommonResult<UnitConvertRespDTO> convertByName(@Valid @RequestBody UnitConvertByNameReqDTO reqDTO);

    /**
     * 批量按ID转换单位
     *
     * @param reqDTO 批量转换请求参数
     * @return 批量转换结果
     */
    @PostMapping(PREFIX + "/batch-convert")
    @Operation(summary = "批量按ID转换单位")
    CommonResult<BatchUnitConvertRespDTO> batchConvert(@Valid @RequestBody BatchUnitConvertReqDTO reqDTO);

    /**
     * 批量按符号转换单位
     *
     * @param reqDTO 批量转换请求参数(包含单位符号)
     * @return 批量转换结果
     */
    @PostMapping(PREFIX + "/batch-convert-by-symbol")
    @Operation(summary = "批量按符号转换单位")
    CommonResult<BatchUnitConvertRespDTO> batchConvertBySymbol(@Valid @RequestBody BatchUnitConvertBySymbolReqDTO reqDTO);

    /**
     * 批量按名称转换单位
     *
     * @param reqDTO 批量转换请求参数(包含单位名称)
     * @return 批量转换结果
     */
    @PostMapping(PREFIX + "/batch-convert-by-name")
    @Operation(summary = "批量按名称转换单位")
    CommonResult<BatchUnitConvertRespDTO> batchConvertByName(@Valid @RequestBody BatchUnitConvertByNameReqDTO reqDTO);
}
