package com.ruoyi.blockchain.service;

import java.math.BigInteger;
import java.util.List;
import java.util.Map;

import com.ruoyi.blockchain.domain.BlockchainTransaction;
import com.ruoyi.blockchain.domain.ChainEvent;

/**
 * 区块链集成组件接口
 * 
 * 处理区块链连接、数据上链、智能合约执行等核心功能
 * 
 * @author ruoyi
 */
public interface BlockchainIntegrator {
    
    /**
     * 将数据存储到区块链
     * 
     * @param data 要上链的数据
     * @return 区块链交易哈希
     */
    String storeOnChain(String data);
    
    /**
     * 验证链上数据
     * 
     * @param hash 数据哈希
     * @return 验证结果
     */
    boolean verifyOnChain(String hash);
    
    /**
     * 执行智能合约
     * 
     * @param contractAddress 合约地址
     * @param methodName 方法名
     * @param params 参数
     * @return 执行结果
     */
    String executeSmartContract(String contractAddress, String methodName, Object... params);
    
    /**
     * 部署智能合约
     * 
     * @param contractCode 合约代码
     * @param constructorParams 构造函数参数
     * @return 合约地址
     */
    String deploySmartContract(String contractCode, Object... constructorParams);
    
    /**
     * 查询链上数据
     * 
     * @param queryParams 查询参数
     * @return 查询结果
     */
    Map<String, Object> queryChainData(Map<String, Object> queryParams);
    
    /**
     * 监控链上事件
     * 
     * @param eventFilter 事件过滤器
     * @return 事件列表
     */
    List<ChainEvent> monitorChainEvents(Map<String, Object> eventFilter);
    
    /**
     * 计算数据哈希
     * 
     * @param data 原始数据
     * @return 哈希值
     */
    String calculateHash(String data);
    
    /**
     * 获取区块链网络状态
     * 
     * @return 网络状态信息
     */
    Map<String, Object> getNetworkStatus();
    
    /**
     * 获取交易详情
     * 
     * @param txHash 交易哈希
     * @return 交易详情
     */
    BlockchainTransaction getTransactionDetails(String txHash);
    
    /**
     * 获取当前区块高度
     * 
     * @return 区块高度
     */
    BigInteger getCurrentBlockNumber();
    
    /**
     * 检查连接状态
     * 
     * @return 连接是否正常
     */
    boolean isConnected();
}