namespace AlmToolkit.Model
{
    using System.Collections.Generic;

    public class ComparisonNode
    {
        private static int objectCount = 1;

        /// <summary>
        /// Id of the object
        /// </summary>
        public int Id { get; }
        /// <summary>
        /// Node type of the object
        /// Example: Data Source, Table, Relationship, KPI
        /// </summary>
        public string NodeType { get; set; }
        /// <summary>
        /// Id of this object's parent
        /// </summary>
        public int ParentId { get; set; }
        /// <summary>
        /// Name of this object in source schema
        /// </summary>
        public string SourceName { get; set; }
        /// <summary>
        /// Name of this object in target schema
        /// </summary>
        public string TargetName { get; set; }
        /// <summary>
        /// Internal name of this object in source schema
        /// </summary>
        public string SourceInternalName { get; set; }
        /// <summary>
        /// Internal Name of this object in target schema
        /// </summary>
        public string TargetInternalName { get; set; }
        /// <summary>
        /// Indentation level of the object
        /// </summary>
        public int Level { get; set; }
        /// <summary>
        /// Status of the object compared to the source and target
        /// </summary>
        public string Status { get; set; }
        /// <summary>
        /// Current action to be performed for this object
        /// </summary>
        public string MergeAction { get; set; }
        /// <summary>
        /// Code at source
        /// </summary>
        public string SourceObjectDefinition { get; set; }
        /// <summary>
        /// Code at target
        /// </summary>
        public string TargetObjectDefinition { get; set; }
        /// <summary>
        /// Ids of the children nodes
        /// </summary>
        public List<int> ChildNodes { get; set; }
        /// <summary>
        /// Actions that can be performed for this object
        /// </summary>
        public List<string> AvailableActions { get; set; }
        /// <summary>
        /// To maintain if the object is to be shown on UI or not
        /// </summary>
        public bool ShowNode { get; set; }
        /// <summary>
        /// To maintain if the dropdown is disabled on the UI
        /// </summary>
        public bool DropdownDisabled { get; set; }
        /// <summary>
        /// Text mentioning why the dropdown is disabled
        /// </summary>
        public string DisableMessage { get; set; }


        public ComparisonNode()
        {
            Id = objectCount;
            objectCount = objectCount + 1;
            ChildNodes = new List<int>();
        }

    }
}