package cn.novalon.gym.manage.member.service;

import cn.novalon.gym.manage.member.vo.WechatUserInfoVO;
import reactor.core.publisher.Mono;

/**
 * 微信公众号服务接口
 * 
 * @author 付嘉
 * @date 2026-05-01
 */
public interface WechatOfficialService {

    /**
     * 处理订阅事件
     * 
     * @param openId OpenID
     * @return Mono<Void>
     */
    Mono<Void> handleSubscribeEvent(String openId);

    /**
     * 处理取消订阅事件
     * 
     * @param openId OpenID
     * @return Mono<Void>
     */
    Mono<Void> handleUnsubscribeEvent(String openId);

    /**
     * 获取微信用户信息
     * 
     * @param openId OpenID
     * @return Mono<WechatUserInfoVO> 用户信息
     */
    Mono<WechatUserInfoVO> getUserInfo(String openId);

    /**
     * 通过 UnionID 关联小程序用户
     * 
     * @param unionId 微信 UnionID
     * @param officialOpenId OpenID
     * @return Mono<Boolean> 是否关联成功
     */
    Mono<Boolean> linkByUnionId(String unionId, String officialOpenId);

    /**
      * 查询会员订阅状态
     * 
     * @param memberId 会员ID
     * @return Mono<Boolean> true=已订阅false=未订阅
     */
    Mono<Boolean> checkSubscribeStatus(Long memberId);
}
