/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the amplifyuibuilder-2021-08-11.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.AmplifyUIBuilder.Model
{
    /// 
    /// Contains the configuration settings for a user interface (UI) element for an Amplify
    /// app. A component is configured as a primary, stand-alone UI element. Use ComponentChild
    /// to configure an instance of a Component. A ComponentChild
    /// instance inherits the configuration of the main Component.
    /// 
    public partial class Component
    {
        private string _appId;
        private Dictionary _bindingProperties = new Dictionary();
        private List _children = new List();
        private Dictionary _collectionProperties = new Dictionary();
        private string _componentType;
        private DateTime? _createdAt;
        private string _environmentName;
        private Dictionary _events = new Dictionary();
        private string _id;
        private DateTime? _modifiedAt;
        private string _name;
        private Dictionary> _overrides = new Dictionary>();
        private Dictionary _properties = new Dictionary();
        private string _schemaVersion;
        private string _sourceId;
        private Dictionary _tags = new Dictionary();
        private List _variants = new List();
        /// 
        /// Gets and sets the property AppId. 
        /// 
        /// The unique ID of the Amplify app associated with the component.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string AppId
        {
            get { return this._appId; }
            set { this._appId = value; }
        }
        // Check to see if AppId property is set
        internal bool IsSetAppId()
        {
            return this._appId != null;
        }
        /// 
        /// Gets and sets the property BindingProperties. 
        /// 
        /// The information to connect a component's properties to data at runtime. You can't
        /// specify tags as a valid property for bindingProperties.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public Dictionary BindingProperties
        {
            get { return this._bindingProperties; }
            set { this._bindingProperties = value; }
        }
        // Check to see if BindingProperties property is set
        internal bool IsSetBindingProperties()
        {
            return this._bindingProperties != null && this._bindingProperties.Count > 0; 
        }
        /// 
        /// Gets and sets the property Children. 
        /// 
        /// A list of the component's ComponentChild instances.
        /// 
        /// 
        public List Children
        {
            get { return this._children; }
            set { this._children = value; }
        }
        // Check to see if Children property is set
        internal bool IsSetChildren()
        {
            return this._children != null && this._children.Count > 0; 
        }
        /// 
        /// Gets and sets the property CollectionProperties. 
        /// 
        /// The data binding configuration for the component's properties. Use this for a collection
        /// component. You can't specify tags as a valid property for collectionProperties.
        /// 
        /// 
        public Dictionary CollectionProperties
        {
            get { return this._collectionProperties; }
            set { this._collectionProperties = value; }
        }
        // Check to see if CollectionProperties property is set
        internal bool IsSetCollectionProperties()
        {
            return this._collectionProperties != null && this._collectionProperties.Count > 0; 
        }
        /// 
        /// Gets and sets the property ComponentType. 
        /// 
        /// The type of the component. This can be an Amplify custom UI component or another custom
        /// component.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=255)]
        public string ComponentType
        {
            get { return this._componentType; }
            set { this._componentType = value; }
        }
        // Check to see if ComponentType property is set
        internal bool IsSetComponentType()
        {
            return this._componentType != null;
        }
        /// 
        /// Gets and sets the property CreatedAt. 
        /// 
        /// The time that the component was created.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public DateTime CreatedAt
        {
            get { return this._createdAt.GetValueOrDefault(); }
            set { this._createdAt = value; }
        }
        // Check to see if CreatedAt property is set
        internal bool IsSetCreatedAt()
        {
            return this._createdAt.HasValue; 
        }
        /// 
        /// Gets and sets the property EnvironmentName. 
        /// 
        /// The name of the backend environment that is a part of the Amplify app.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string EnvironmentName
        {
            get { return this._environmentName; }
            set { this._environmentName = value; }
        }
        // Check to see if EnvironmentName property is set
        internal bool IsSetEnvironmentName()
        {
            return this._environmentName != null;
        }
        /// 
        /// Gets and sets the property Events. 
        /// 
        /// Describes the events that can be raised on the component. Use for the workflow feature
        /// in Amplify Studio that allows you to bind events and actions to components.
        /// 
        /// 
        public Dictionary Events
        {
            get { return this._events; }
            set { this._events = value; }
        }
        // Check to see if Events property is set
        internal bool IsSetEvents()
        {
            return this._events != null && this._events.Count > 0; 
        }
        /// 
        /// Gets and sets the property Id. 
        /// 
        /// The unique ID of the component.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string Id
        {
            get { return this._id; }
            set { this._id = value; }
        }
        // Check to see if Id property is set
        internal bool IsSetId()
        {
            return this._id != null;
        }
        /// 
        /// Gets and sets the property ModifiedAt. 
        /// 
        /// The time that the component was modified.
        /// 
        /// 
        public DateTime ModifiedAt
        {
            get { return this._modifiedAt.GetValueOrDefault(); }
            set { this._modifiedAt = value; }
        }
        // Check to see if ModifiedAt property is set
        internal bool IsSetModifiedAt()
        {
            return this._modifiedAt.HasValue; 
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// The name of the component.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=255)]
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }
        // Check to see if Name property is set
        internal bool IsSetName()
        {
            return this._name != null;
        }
        /// 
        /// Gets and sets the property Overrides. 
        /// 
        /// Describes the component's properties that can be overriden in a customized instance
        /// of the component. You can't specify tags as a valid property for overrides.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public Dictionary> Overrides
        {
            get { return this._overrides; }
            set { this._overrides = value; }
        }
        // Check to see if Overrides property is set
        internal bool IsSetOverrides()
        {
            return this._overrides != null && this._overrides.Count > 0; 
        }
        /// 
        /// Gets and sets the property Properties. 
        /// 
        /// Describes the component's properties. You can't specify tags as a valid
        /// property for properties.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public Dictionary Properties
        {
            get { return this._properties; }
            set { this._properties = value; }
        }
        // Check to see if Properties property is set
        internal bool IsSetProperties()
        {
            return this._properties != null && this._properties.Count > 0; 
        }
        /// 
        /// Gets and sets the property SchemaVersion. 
        /// 
        /// The schema version of the component when it was imported.
        /// 
        /// 
        public string SchemaVersion
        {
            get { return this._schemaVersion; }
            set { this._schemaVersion = value; }
        }
        // Check to see if SchemaVersion property is set
        internal bool IsSetSchemaVersion()
        {
            return this._schemaVersion != null;
        }
        /// 
        /// Gets and sets the property SourceId. 
        /// 
        /// The unique ID of the component in its original source system, such as Figma.
        /// 
        /// 
        public string SourceId
        {
            get { return this._sourceId; }
            set { this._sourceId = value; }
        }
        // Check to see if SourceId property is set
        internal bool IsSetSourceId()
        {
            return this._sourceId != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// One or more key-value pairs to use when tagging the component.
        /// 
        /// 
        public Dictionary Tags
        {
            get { return this._tags; }
            set { this._tags = value; }
        }
        // Check to see if Tags property is set
        internal bool IsSetTags()
        {
            return this._tags != null && this._tags.Count > 0; 
        }
        /// 
        /// Gets and sets the property Variants. 
        /// 
        /// A list of the component's variants. A variant is a unique style configuration of a
        /// main component.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public List Variants
        {
            get { return this._variants; }
            set { this._variants = value; }
        }
        // Check to see if Variants property is set
        internal bool IsSetVariants()
        {
            return this._variants != null && this._variants.Count > 0; 
        }
    }
}