using System.Collections.Generic;
using UnityEngine.Advertisements.Utilities;

namespace UnityEngine.Advertisements
{
    /// <summary>
    /// A class for sending various metadata to UnityAds.
    /// </summary>
    public sealed class MetaData
    {
        private readonly IDictionary<string, object> m_MetaData = new Dictionary<string, object>();

        /// <summary>
        /// Metadata category.
        /// </summary>
        public string category { get; private set; }

        /// <summary>
        /// Constructs a metadata instance that can be passed to the <c>Advertisement</c> class.
        /// </summary>
        public MetaData(string category)
        {
            this.category = category;
        }

        /// <summary>
        /// Sets new metadata fields.
        /// </summary>
        /// <param name="key">Metadata key.</param>
        /// <param name="value">Metadata value (must be JSON serializable).</param>
        public void Set(string key, object value)
        {
            m_MetaData[key] = value;
        }

        /// <summary>
        /// Returns the stored metadata key.
        /// </summary>
        public object Get(string key)
        {
            return m_MetaData[key];
        }

        /// <summary>
        /// Returns the stored metadata.
        /// </summary>
        public IDictionary<string, object> Values()
        {
            return m_MetaData;
        }

        internal string ToJSON()
        {
            return Json.Serialize(m_MetaData);
        }
    }
}