namespace Stove.StoveSDK
{
    using System.Collections.Generic;
    using MiniJSON;

    /**
     * GameLog Event.
     * @since 2.8.4
     */
    public class GameLogEvent
    {
        /**
         * Parameters of the event.
         * @since 2.8.4
         */
        public Dictionary<string, object> Parameters { get; set; }

        /**
         * Additional parameters of the event.
         * @since 2.8.4
         */
        public Dictionary<string, object> AdditionalParameters { get; set; }

        /**
         * Default constructor.
         * @since 2.8.4
         */
        public GameLogEvent()
        {
            Parameters = null;
            AdditionalParameters = null;
        }

        /**
         * Constructor with parameters.
         * @param parameters Parameters of the event.
         * @param additionalParameters Additional parameters of the event.
         * @since 2.8.4
         */
        public GameLogEvent(Dictionary<string, object> parameters, Dictionary<string, object> additionalParameters)
        {
            Parameters = parameters;
            AdditionalParameters = additionalParameters;
        }

        /**
         * Dictionary deserialization.
         * @return Dictionary representation of the event.
         * @since 2.8.4
         */
        public Dictionary<string, object> ToDictionary()
        {
            Dictionary<string, object> dictionary = new Dictionary<string, object>();
            if (Parameters != null)
            {
                dictionary.Add("parameters", Parameters);
            }
            if (AdditionalParameters != null)
            {
                dictionary.Add("additionalParameters", AdditionalParameters);
            }
            return dictionary;
        }

        /**
         * JSON serialization.
         * @return JSON string representation of the event.
         * @since 2.8.4
         */
        public string ToJSONString()
        {
            Dictionary<string, object> dictionary = ToDictionary();
        
            return Json.Serialize(dictionary);
        }

        public override string ToString()
        {
            return "LogEvent(Parameters='" + Parameters + "AdditionalParameters='" + AdditionalParameters + ")";
        }
    }
}

