using System;
using System.Collections.Generic;

namespace Top.Api
{
    /// <summary>
    /// TOP请求接口。
    /// </summary>
    public interface ITopRequest<out T> where T : TopResponse
    {
        /// <summary>
        /// 获取TOP的API名称。
        /// </summary>
        string GetApiName();

        /// <summary>
        /// 获取被调用的目标AppKey
        /// </summary>
        string GetTargetAppKey();

        /// <summary>
        /// 获取所有的Key-Value形式的文本请求参数字典。
        /// </summary>
        IDictionary<string, string> GetParameters();

        /// <summary>
        /// 获取自定义HTTP请求头参数。
        /// </summary>
        IDictionary<string, string> GetHeaderParameters();

        /// <summary>
        ///  获取API请求的用户授权码，仅用于批量API调用请求。
        /// </summary>
        string GetBatchApiSession();

        /// <summary>
        /// 设置API请求的用户授权码，仅用于批量API调用请求。
        /// </summary>
        void SetBatchApiSession(string session);

        /// <summary>
        /// 获取API在批量调用中的顺序，仅用于批量API调用请求。
        /// </summary>
        int GetBatchApiOrder();

        /// <summary>
        /// 设置API在批量调用中的顺序，仅用于批量API调用请求。
        /// </summary>
        void SetBatchApiOrder(int order);

        /// <summary>
        /// 客户端参数检查，减少服务端无效调用。
        /// </summary>
        void Validate();
    }
}
