package cn.axzo.msg.center.api;

import cn.axzo.msg.center.api.fallback.PendingMessageServiceApiFallBack;
import cn.axzo.msg.center.api.request.PendingMessagePageReq;
import cn.axzo.msg.center.api.request.PendingMessageTemporarilyStatisticReq;
import cn.axzo.msg.center.api.response.PendingMessageBriefRes;
import cn.axzo.msg.center.api.response.PendingMessageStatisticRes;
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyStatisticRes;
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyTypeRes;
import cn.azxo.framework.common.model.CommonResponse;
import cn.azxo.framework.common.model.Page;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import javax.validation.Valid;
import java.util.List;

/**
 * 代办类型的消息相关接口
 *
 * @author cold_blade
 * @version 1.0
 * @date 2023/8/30
 */
@Component
@FeignClient(name = "msg-center", url = "${msg-center.serviceUrl:http://msg-center:8080}",
        fallback = PendingMessageServiceApiFallBack.class)
public interface PendingMessageServiceApi {

    /**
     * 统计待办消息数量
     * Notice: 该接口是一个临时解决方案，不建议其它业务场景采用该接口
     *
     * @param request 统计请求的入参
     * @return 符合条件的待办消息数量
     */
    @PostMapping("api/message/pending-msg/temporary-statistic")
    CommonResponse<List<PendingMessageTemporarilyStatisticRes>> temporarilyStatistic(
            @RequestBody @Valid PendingMessageTemporarilyStatisticReq request);

    /**
     * 根据消息的临时的业务分类分页查询个人相关的待办消息
     * Notice: 该接口是一个临时解决方案，不建议其它业务场景采用该接口
     *
     * @param request  分页查询的入参
     * @return 符合条件的待办消息
     */
    @PostMapping("api/message/pending-msg/temporary-page")
    CommonResponse<PendingMessageStatisticRes> temporarilyPage(@RequestBody @Valid PendingMessagePageReq request);

    /**
     * 列表查询待办消息临时分类
     * Notice: 该接口是一个临时解决方案，不建议其它业务场景采用该接口
     *
     * @return 待办消息临时分类的列表
     */
    @PostMapping("api/message/pending-msg/temporary-type/list")
    CommonResponse<List<PendingMessageTemporarilyTypeRes>> listTemporarilyTypes();

    /**
     * 分页查询代办消息
     *
     * @param request  分页查询的入参
     * @return 符合条件的待办消息
     */
    @PostMapping("api/message/pending-msg/page")
    CommonResponse<Page<PendingMessageBriefRes>> pageQuery(@RequestBody PendingMessagePageReq request);
}
