package com.yuchen.saas.consumer.api.feign;

import com.yuchen.saas.consumer.api.entity.*;
import org.nest.springwrap.core.launch.app.AppNameConstant;
import org.nest.springwrap.core.tool.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * @Author: 张逸飞
 * @Date: 2021年7月14日 15:58:32
 * @Description: 微信模版消息接口
 */
@FeignClient(
        value = AppNameConstant.SAAS_CONSUMER,
        fallback = WeChatTempMessageClientFallback.class
)
public interface WeChatTempMessageClient {

    /**
     * 审核结果通知
     * @param subMsgAuditResultsDTO 审核结果实体类
     * @return
     */
    @PostMapping(value = "/message/sendAuditResults")
    R sendAuditResults(@RequestBody SubMsgAuditResultsDTO subMsgAuditResultsDTO);

    /**
     * 充电结束通知
     * @param subChargeResultsDTO 充电结束通知实体类
     * @return
     */
    @PostMapping(value = "/message/sendChargeResults")
    R sendChargeResults(@RequestBody SubChargeResultsDTO subChargeResultsDTO);


    /**
     * 报警推送
     * @return
     */
    @PostMapping(value = "/message/sendChargeWarnMsg")
    R sendChargeWarnMsg(@RequestBody SubChargeWarnDTO subChargeWarnDTO);


    @PostMapping(value = "/message/sendOccupyEvent")
    R sendOccupyEvent(@RequestBody SubOccupyEventDTO subOccupyEventDTO);

    @PostMapping(value = "/message/sendInvoiceNoticeMessage")
    R sendInvoiceNoticeMessage(@RequestBody TempMessageInvoiceNoticeDTO noticeDTO);

    //--------------------------------- 暂时弃用 -------------------------------------

    /**
     * 审核结果模版消息
     * @param reviewResult 审核结果实体类
     * @return
     */
    @PostMapping("/tempMessage/sendReviewMessage")
    R sendReviewMessage(@RequestBody TempMessageReviewResultDTO reviewResult);

    /**
     * 月卡到期提醒模版消息发送
     * @param monthCardExpired 月卡到期提醒实体类
     * @return
     */
    @PostMapping("/tempMessage/sendMonthCardExpiredMessage")
    R sendMonthCardExpiredMessage(@RequestBody TempMessageMonthCardExpiredDTO monthCardExpired);

    /**
     * 退款成功消息发送
     * @param refundInform
     * @return
     */
    @PostMapping("/message/sendRefundSucceed")
    R sendRefundSucceed(@RequestBody RefundInform refundInform);

    /**
     * 退款失败消息发送
     * @param refundInform
     * @return
     */
    @PostMapping("/message/sendRefundFailed")
    R sendRefundFailed(@RequestBody RefundInform refundInform);

    /**
     * 停车缴费成功通知
     * @param parkingPayment
     * @return
     */
    @PostMapping("/message/sendParkingPayment")
    R sendParkingPayment(@RequestBody ParkingPayment parkingPayment);

    /**
     * 车辆出场通知
     * @param vehicleExit
     * @return
     */
    @PostMapping("/message/sendVehicleExitOut")
    R sendVehicleExitOut(@RequestBody VehicleExit vehicleExit);

    /**
     * 车辆入场通知
     * @param vehicleExit
     * @return
     */
    @PostMapping("/message/sendVehicleExitIn")
    R sendVehicleExitIn(@RequestBody VehicleExit vehicleExit);


    @PostMapping("/tempMessage/getJumpUrl")
    R getJumpUrl(@RequestBody WeChatSchemeParam param);

    /**
     * 访客预约(平台用户)通知
     * @param visitorUserDTO 模版消息-预约成功通知(平台用户)-实体类
     * @return
     */
    @PostMapping(value = "/tempMessage/sendVisitorUser")
    R sendVisitorUser(@RequestBody TempMessageVisitorUserDTO visitorUserDTO);

    /**
     * 访客预约(管理员)通知
     * @param visitorManageDTO 模版消息-预约提醒通知(管理员)-实体类
     * @return
     */
    @PostMapping(value = "/tempMessage/sendVisitorManage")
    R sendVisitorManage(@RequestBody TempMessageVisitorManageDTO visitorManageDTO);

    /**
     * @description: 访客预约消息通知(类目模板消息)
     * @author mqs
     * @date 2023/7/13
     * @version 1.0
     */
    @PostMapping(value = "/tempMessage/sendVisitorMessage")
    R sendVisitorMessage(@RequestBody TempVisitorMessageDTO visitorMessageDTO);

    /**
     * @description: 访客取消预约消息通知(类目模板消息)
     * @author mqs
     * @date 2023/7/13
     * @version 1.0
     */
    @PostMapping(value = "/tempMessage/cancelVisitorMessage")
    R cancelVisitorMessage(@RequestBody TempVisitorCancelMessageDTO visitorCancelMessageDTO);


    @PostMapping(value = "/tempMessage/vehicleBlacklistMessage")
    R vehicleBlacklistMessage(@RequestBody TempVehicleBlacklistMessageDTO blacklistMessageDTO);


    /**
     * 占位黑名单那车辆微信推送
     * @param occupyBlacklistMessageDTO
     * @return
     */
    @PostMapping(value = "/tempMessage/occupyBlacklistMessage")
    R occupyBlacklistMessage(TempOccupyBlacklistMessageDTO occupyBlacklistMessageDTO);
}
