package com.iailab.module.model.api.mdk;

import com.iailab.module.model.api.mdk.dto.*;
import com.iailab.module.model.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 javax.validation.Valid;

/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年08月26日
 */
@FeignClient(name = ApiConstants.NAME)
@Tag(name = "RPC 服务 - 模型调用接口")
public interface MdkApi {

    String PREFIX = ApiConstants.PREFIX + "/mdk";

    @PostMapping(PREFIX + "/predict-module")
    @Operation(summary = "执行模块预测")
    MdkPredictModuleRespDTO predictModule(@Valid @RequestBody MdkPredictReqDTO reqDTO);

    @PostMapping(PREFIX + "/predict-item")
    @Operation(summary = "执行单独预测")
    MdkPredictItemRespDTO predictItem(@Valid @RequestBody MdkPredictReqDTO reqDTO);

    @PostMapping(PREFIX + "/predict-sim-adjust")
    @Operation(summary = "模拟调整")
    Boolean predictSimAdjust(@Valid @RequestBody MdkPredictSimAdjustReqDTO reqDTO);

    @PostMapping(PREFIX + "/predict-adjust")
    @Operation(summary = "预测自动调整")
    Boolean predictAutoAdjust(@Valid @RequestBody MdkPredictReqDTO reqDTO);

    @PostMapping(PREFIX + "/schedule-scheme")
    @Operation(summary = "执行调度方案")
    MdkScheduleRespDTO doSchedule(@Valid @RequestBody MdkScheduleReqDTO reqDTO);

    @PostMapping(PREFIX + "/schedule-result")
    @Operation(summary = "获取调度执行结果,不保存记录")
    MdkScheduleRespDTO runSchedule(MdkScheduleReqDTO reqDTO);

    @PostMapping(PREFIX + "/schedule-model/out")
    @Operation(summary = "调度模型数据下发")
    Boolean scheduleModelOut(@RequestBody MdkScheduleRespDTO dto);
}