/*
 * Copyright (C) Alibaba Cloud Computing
 * All rights reserved.
 * 
 * 版权所有 (C)阿里云计算有限公司
 */

using System.Collections.Generic;

namespace Aliyun.OSS
{
    /// <summary>
    /// 获取List Multipart Upload的请求结果。
    /// </summary>
    public class MultipartUploadListing
    {
        private readonly IList<MultipartUpload> _multipartUploads = new List<MultipartUpload>();
        private readonly IList<string> _commonPrefixes = new List<string>();
        
        /// <summary>
        /// 获取Object所在的<see cref="Bucket" />的名称。
        /// </summary>
        public string BucketName { get; internal set; }
        
        /// <summary>
        /// 获取请求参数<see cref="P:ListMultipartUploadsRequest.KeyMarker" />的值。
        /// </summary>
        public string KeyMarker { get; internal set; }
        
        /// <summary>
        /// 获取请求参数<see cref="P:ListMultipartUploadsRequest.Delimiter" />的值。
        /// </summary>
        public string Delimiter { get; internal set; }
        
        /// <summary>
        /// 获取请求参数<see cref="P:ListMultipartUploadsRequest.Prefix" />的值。
        /// </summary>
        public string Prefix { get; internal set; }
        
        /// <summary>
        /// 获取请求参数<see cref="P:ListMultipartUploadsRequest.UploadIdMarker" />的值。
        /// </summary>
        public string UploadIdMarker { get; internal set; }
        
        /// <summary>
        /// 获取请求参数<see cref="P:ListMultipartUploadsRequest.MaxUploads" />的值。
        /// </summary>
        public int MaxUploads { get; internal set; }
        
        /// <summary>
        /// 标明是否本次返回的Multipart Upload结果列表被截断。
        /// “true”表示本次没有返回全部结果;
        /// “false”表示本次已经返回了全部结果。
        /// </summary>
        public bool IsTruncated { get; internal set; }
        
        /// <summary>
        /// 列表的起始Object位置。
        /// </summary>
        public string NextKeyMarker { get; internal set; }
        
        /// <summary>
        /// 如果本次没有返回全部结果,响应请求中将包含NextUploadMarker元素,
        /// 用于标明接下来请求的UploadMarker值。
        /// </summary>
        public string NextUploadIdMarker { get; internal set; }
        
        /// <summary>
        /// 所有Multipart Upload事件
        /// </summary>
        public IEnumerable<MultipartUpload> MultipartUploads
        {
            get { return _multipartUploads; }
        }
        
        /// <summary>
        /// 获取返回结果中的CommonPrefixes部分。
        /// </summary>
        public IEnumerable<string> CommonPrefixes
        {
            get { return _commonPrefixes; }
        }

        /// <summary>
        /// 构造一个新的<see cref="MultipartUploadListing" />实例。
        /// </summary>
        /// <param name="bucketName"><see cref="OssObject" />所在<see cref="Bucket" />的名称。</param>
        public MultipartUploadListing(string bucketName)
        {
            BucketName = bucketName;
        }
        
        /// <summary>
        /// 增加<see cref="MultipartUpload"/>事件
        /// </summary>
        /// <param name="multipartUpload">事件信息</param>
        internal void AddMultipartUpload(MultipartUpload multipartUpload)
        {
            _multipartUploads.Add(multipartUpload);
        }
        
        /// <summary>
        /// 增加公共前缀
        /// </summary>
        /// <param name="prefix">需要增加的前缀字符串</param>
        internal void AddCommonPrefix(string prefix)
        {
            _commonPrefixes.Add(prefix);
        }
    }
}