package com.friday.custody.api.feignclient;


import com.friday.custody.api.feignconfig.HtscFeignConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * https://pb.htsc.com.cn/
 * http://168.61.13.43:8082
 */
@FeignClient(value = "friday-api",
        url = "http://168.61.13.43:8082",
        configuration = HtscFeignConfiguration.class)
public interface HtscApi {

    /**
     * 产品信息
     * @param appId
     * @return
     */
    @RequestMapping(method = RequestMethod.GET, value = "/incos-api/fund/getPrdtInfo")
    String queryProductInfo(@RequestParam(value = "appId") Integer appId);


    /**
     * 估值表
     * @param appId
     * @param valueDate 估值日期，格式yyyyMMdd
     * @return
     */
    @RequestMapping(method = RequestMethod.GET, value = "/incos-api/query/report/getValuationDetail")
    String queryValuation(@RequestParam(value = "appId") Integer appId,
                          @RequestParam(value = "valueDate") String valueDate);


    /**
     *基金净值
     *
     * 开始日期和结束日期跨度不得超过3个月
     * @param appId
     * @param beginDate 净值日期开始，固定格式yyyyMMdd（开始时间和结束时间跨度建议一个月，否则可能会超时）
     * @param endDate 净值日期结束，固定格式yyyyMMdd（开始时间和结束时间跨度建议一个月，否则可能会超时）
     * @return
     */

    @RequestMapping(method = RequestMethod.GET, value = "/incos-api/fund/getFundValue")
    String queryNetValue(@RequestParam(value = "appId") Integer appId,
                         @RequestParam(value = "beginDate") String beginDate,
                         @RequestParam(value = "endDate") String endDate);

    /**
     * 二级市场投资主体查询
     *
     * 流控限制：1分钟内同一个appId最多10次调用
     * 访问时间限制：非交易时间（9:00-15:30不可访问）
     * @param appId
     * @return
     */
    @RequestMapping(method = RequestMethod.GET, value = "/incos-api/investor/getInvestmentSubjects")
    String queryInvestmentSubjects(@RequestParam(value = "appId") Integer appId);


    /**
     * 二级市场投资主体银行账户信息
     * @param appId
     * @return
     */
    @RequestMapping(method = RequestMethod.GET, value = "/incos-api/investor/getBankAccountInfo")
    String queryBankAccountInfo(@RequestParam(value = "appId") Integer appId);


    /**
     * 单个募集户余额查询（优先实时查询，如果银行接口失败则查询本地数据库获取最近一次余额）
     * 流控限制：1分钟内同一个appId最多10次调用
     * 调用频率：建议轮询频率为10min以上
     * @param appId
     * @param account
     * @param fundCode
     * @param pageNo
     * @param pageSize
     * @return
     */
    @RequestMapping(method = RequestMethod.GET, value = "/incos-api/query/getMJAccountBalance")
    String queryMJAccountBalance(@RequestParam(value = "appId") Integer appId,
                                 @RequestParam(value = "account") String account,
                                 @RequestParam(value = "fundCode") String fundCode,
                                 @RequestParam(value = "pageNo") Integer pageNo,
                                 @RequestParam(value = "pageSize") Integer pageSize);


    /**
     * 单个募集户当日流水查询（先实时查银行流水，更新到本地落库后返回分页数据）
     * 银行实时查询流水可能会耗时较长。
     * 流控限制：1分钟内同一个appId最多10次调用
     * 调用频率：建议轮询频率为10min以上
     * @param appId
     * @param account
     * @param fundCode
     * @param pageNo
     * @param pageSize
     * @return
     */
    @RequestMapping(method = RequestMethod.GET, value = "/incos-api/query/getMJAccountCurrentDetail")
    String queryMJAccountCurrentDetail(@RequestParam(value = "appId") Integer appId,
                                 @RequestParam(value = "account") String account,
                                 @RequestParam(value = "fundCode") String fundCode,
                                 @RequestParam(value = "pageNo") Integer pageNo,
                                 @RequestParam(value = "pageSize") Integer pageSize);


    /**
     * 募集户历史流水查询（当天以前的历史流水会落华泰系统）
     * 历史流水必须传入时间区间[beginDate,endDate]，并且取闭区间。
     * 时间区间的跨度不能超过三个自然月。
     * 流控限制：1分钟内同一个appId，最多20次调用
     * @param appId
     * @param account
     * @param fundCode
     * @param beginDate
     * @param endDate
     * @param pageNo
     * @param pageSize
     * @return
     */
    @RequestMapping(method = RequestMethod.GET, value = "/incos-api/query/getMJAccountHistoryDetail")
    String queryMJAccountHistoryDetail(@RequestParam(value = "appId") Integer appId,
                                       @RequestParam(value = "account") String account,
                                       @RequestParam(value = "fundCode") String fundCode,
                                       @RequestParam(value = "beginDate") String beginDate,
                                       @RequestParam(value = "endDate") String endDate,
                                       @RequestParam(value = "pageNo") Integer pageNo,
                                       @RequestParam(value = "pageSize") Integer pageSize);


    /**
     * 资金账户基本信息查询
     * 流控限制：1分钟内同一个appId最多20次调用
     * @param appId
     * @param accountTypeCode
     * @param pageNo
     * @param pageSize
     * @return
     */
    @RequestMapping(method = RequestMethod.GET, value = "/incos-api/query/getBalanceAccount")
    String queryAccountInfo(@RequestParam(value = "appId") Integer appId,
                               @RequestParam(value = "accountTypeCode") String accountTypeCode,
                               @RequestParam(value = "pageNo") Integer pageNo,
                               @RequestParam(value = "pageSize") Integer pageSize);
}

