using System;
using System.Collections.Generic;
using Top.Api.Util;
using Top.Api;
using Top.Api.DingTalk;
namespace DingTalk.Api.Request
{
    /// 
    /// TOP API: dingtalk.oapi.cspace.auth.generate
    /// 
    public class OapiCspaceAuthGenerateRequest : BaseDingTalkRequest
    {
        /// 
        /// 微应用的agentId
        /// 
        public Nullable AgentId { get; set; }
        /// 
        /// 被授权的应用appId
        /// 
        public Nullable AppId { get; set; }
        /// 
        /// 授权码有效期,单位为日,为空则表示永久授权
        /// 
        public Nullable Duration { get; set; }
        /// 
        /// 授权访问的文件id列表,id之间用英文逗号隔开,如"fileId1,fileId2", type=download时必须传递
        /// 
        public string FileIds { get; set; }
        /// 
        /// 授权访问的路径,如授权访问所有文件传"/",授权访问/doc文件夹传"/doc/",需要utf-8 urlEncode, type=add时必须传递
        /// 
        public string Path { get; set; }
        /// 
        /// 权限类型,目前支持上传和预览,上传请传add,预览请传download
        /// 
        public string Type { get; set; }
        #region IDingTalkRequest Members
        public override string GetApiName()
        {
            return "dingtalk.oapi.cspace.auth.generate";
        }
        public override string GetApiCallType()
        {
            return DingTalkConstants.CALL_TYPE_OAPI;
        }
        public override IDictionary GetParameters()
        {
            TopDictionary parameters = new TopDictionary();
            parameters.Add("agent_id", this.AgentId);
            parameters.Add("app_id", this.AppId);
            parameters.Add("duration", this.Duration);
            parameters.Add("file_ids", this.FileIds);
            parameters.Add("path", this.Path);
            parameters.Add("type", this.Type);
            if (this.otherParams != null)
            {
                parameters.AddAll(this.otherParams);
            }
            return parameters;
        }
        public override void Validate()
        {
            RequestValidator.ValidateRequired("agent_id", this.AgentId);
            RequestValidator.ValidateRequired("app_id", this.AppId);
            RequestValidator.ValidateMaxListSize("file_ids", this.FileIds, 20);
            RequestValidator.ValidateRequired("type", this.Type);
        }
        #endregion
    }
}