using Apewer.Models;
using System;
using System.IO;

namespace Apewer.Web
{

    /// <summary></summary>
    [Serializable]
    public sealed class ApiResponse
    {

        #region internal

        private ApiModel _model = null;
        private Json _data = Json.NewObject();

        /// <summary>API 的执行时间,以毫秒为单位。</summary>
        public long Duration { get; set; }

        /// <summary>Application。</summary>
        public string Application { get; set; }

        /// <summary>Function。</summary>
        public string Function { get; set; }

        /// <summary>Random。</summary>
        public string Random { get; set; }

        #endregion

        #region user

        /// <summary>头。</summary>
        public StringPairs Headers { get; set; } = new StringPairs();

        /// <summary>Cookies。</summary>
        public StringPairs Cookies { get; set; } = new StringPairs();

        /// <summary>获取或设置输出模型。</summary>
        public ApiModel Model
        {
            get { return _model; }
            set
            {
                var old = _model;
                _model = value;
                RuntimeUtility.Dispose(old);
            }
        }

        /// <summary>当响应 Json 时,强制缩进排版。</summary>
        public bool Indented { get; set; }

        /// <summary>状态。</summary>
        public string Status { get; set; }

        /// <summary>消息。</summary>
        public string Message { get; set; }

        /// <summary>自定义数据。</summary>
        public Json Data
        {
            get { return _data; }
            set { _data = value ?? Json.NewObject(); }
        }

        /// <summary>设置 Data 的属性。</summary>
        public string this[string name] { get => Data[name]; set => Data[name] = value; }

        #endregion

    }

}