package cn.ey.biz.module.system.api.rate;

import cn.ey.biz.common.pojo.R;
import cn.ey.biz.module.system.api.rate.dto.*;
import cn.ey.biz.module.system.enums.ApiConstants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

@FeignClient(name = ApiConstants.NAME)
@Api(tags = "RPC 服务 - 财务费率")
public interface RateApi {

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

    /**
     * 通过GPN获取费率
     *
     * @param rateForGpnReqDTO 率gpn点播dto
     * @return {@link R}<{@link List}<{@link RateResDTO}>>
     */
    @GetMapping(PREFIX + "/get-rate-gpn")
    @ApiOperation("获取人员费率")
    R<List<RateResDTO>> getRateForGpn(@RequestBody @Validated RateForGpnReqDTO rateForGpnReqDTO);


    /**
     * 通过配置获取费率
     *
     * @param rateForFirmConfReqDTO 率公司配置要求dto
     * @return {@link R}<{@link List}<{@link RateResDTO}>>
     */
    @GetMapping(PREFIX + "/get-rate-firm-config")
    @ApiOperation("获取人员费率")
    R<List<RateResDTO>> getFirmRateForConfig(@RequestBody @Validated RateForFirmConfReqDTO rateForFirmConfReqDTO);


    /**
     * gds配置
     * 通过配置获取GDS费率
     *
     * @param rateForGdsConfReqDTO 率为gds conf点播dto
     * @return {@link R}<{@link List}<{@link RateResDTO}>>
     */
    @GetMapping(PREFIX + "/get-rate-gds-config")
    @ApiOperation("获取人员费率")
    R<List<RateResDTO>> getGdsRateForConfig(@RequestBody @Validated RateForGdsConfReqDTO rateForGdsConfReqDTO);


    /**
     * 获取费用分摊系数
     *
     * @param feeSharingFactorReqDTO 费用分摊系数参数
     * @return {@link R}<{@link FeeSharingFactorResDTO}>
     */
    @GetMapping(PREFIX + "/get-fsf-rate")
    @ApiOperation("获取费用分摊系数")
    R<FeeSharingFactorResDTO> getFeeSharingFactorRate(@RequestBody FeeSharingFactorReqDTO feeSharingFactorReqDTO);

    /**
     * 获取人员费率以及Surcharges（日期范围）
     *
     * @param rateReqDTO 率要求dto
     * @return {@link R}<{@link List}<{@link RateResDTO}>>
     */
    @GetMapping(PREFIX + "/get-rate-scope")
    @ApiOperation("获取人员费率以及Surcharges(日期范围)")
    R<List<RateResDTO>> getRateForDateScope(@RequestBody RateReqDTO rateReqDTO);


    /**
     * 得到gds职位
     *
     * @param codeBlock 代码块
     * @return {@link R}<{@link List}<{@link GradeLevelResDTO}>>
     */
    @GetMapping(PREFIX + "/get-gds-rank/{codeBlock}")
    @ApiOperation("得到gds职位")
    R<List<GradeLevelResDTO>> getGdsRank(@PathVariable("codeBlock") String codeBlock);

}
