package com.sino.mci.channel.wecom.archive;

import com.sino.mci.channel.wecom.archive.model.FinanceMessage;

import java.util.List;

/**
 * 企业微信会话存档 Finance SDK 客户端接口。
 *
 * <p>对应官方 C/JNI SDK 的封装：</p>
 * <ul>
 *     <li>{@link #init(String, String)} 对应 NewSdk / DestroySdk 的初始化</li>
 *     <li>{@link #getChatData(long, int)} 对应 GetChatData 拉取加密数据</li>
 *     <li>{@link #decryptData(String, String)} 对应 DecryptData 解密单条消息</li>
 * </ul>
 *
 * <p>实现说明：</p>
 * <ul>
 *     <li>{@link MockFinanceSdkClient}：默认实现，返回模拟数据，用于无 JNI 环境开发与测试。</li>
 *     <li>{@link NativeFinanceSdkClient}：预留 JNI 接入路径，真实环境可替换。</li>
 * </ul>
 */
public interface FinanceSdkClient {

    /**
     * 初始化 SDK 会话。
     *
     * @param corpId 企业 ID
     * @param secret 会话存档 Secret
     * @return 是否初始化成功
     */
    boolean init(String corpId, String secret);

    /**
     * 按 seq 游标分页拉取加密聊天数据。
     *
     * @param seq   起始 seq（游标）
     * @param limit 本次拉取条数，建议 100-1000
     * @return 加密消息列表；无新消息时返回空列表
     */
    List<FinanceMessage> getChatData(long seq, int limit);

    /**
     * 解密单条加密聊天消息。
     *
     * @param encryptKey    RSA 解密后的消息密钥（encrypt_random_key 解密结果）
     * @param encryptChatMsg 加密消息体（encrypt_chat_msg）
     * @return 解密后的明文 JSON 字符串
     */
    String decryptData(String encryptKey, String encryptChatMsg);
}
