/*
 * 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 rekognition-2016-06-27.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.Rekognition.Model
{
    /// <summary>
    /// Container for the parameters to the StartSegmentDetection operation.
    /// Starts asynchronous detection of segment detection in a stored video.
    /// 
    ///  
    /// <para>
    /// Amazon Rekognition Video can detect segments in a video stored in an Amazon S3 bucket.
    /// Use <a>Video</a> to specify the bucket name and the filename of the video. <code>StartSegmentDetection</code>
    /// returns a job identifier (<code>JobId</code>) which you use to get the results of
    /// the operation. When segment detection is finished, Amazon Rekognition Video publishes
    /// a completion status to the Amazon Simple Notification Service topic that you specify
    /// in <code>NotificationChannel</code>.
    /// </para>
    ///  
    /// <para>
    /// You can use the <code>Filters</code> (<a>StartSegmentDetectionFilters</a>) input parameter
    /// to specify the minimum detection confidence returned in the response. Within <code>Filters</code>,
    /// use <code>ShotFilter</code> (<a>StartShotDetectionFilter</a>) to filter detected shots.
    /// Use <code>TechnicalCueFilter</code> (<a>StartTechnicalCueDetectionFilter</a>) to filter
    /// technical cues. 
    /// </para>
    ///  
    /// <para>
    /// To get the results of the segment detection operation, first check that the status
    /// value published to the Amazon SNS topic is <code>SUCCEEDED</code>. if so, call <a>GetSegmentDetection</a>
    /// and pass the job identifier (<code>JobId</code>) from the initial call to <code>StartSegmentDetection</code>.
    /// 
    /// </para>
    ///  
    /// <para>
    /// For more information, see Detecting video segments in stored video in the Amazon Rekognition
    /// Developer Guide.
    /// </para>
    /// </summary>
    public partial class StartSegmentDetectionRequest : AmazonRekognitionRequest
    {
        private string _clientRequestToken;
        private StartSegmentDetectionFilters _filters;
        private string _jobTag;
        private NotificationChannel _notificationChannel;
        private List<string> _segmentTypes = new List<string>();
        private Video _video;

        /// <summary>
        /// Gets and sets the property ClientRequestToken. 
        /// <para>
        /// Idempotent token used to identify the start request. If you use the same token with
        /// multiple <code>StartSegmentDetection</code> requests, the same <code>JobId</code>
        /// is returned. Use <code>ClientRequestToken</code> to prevent the same job from being
        /// accidently started more than once. 
        /// </para>
        /// </summary>
        [AWSProperty(Min=1, Max=64)]
        public string ClientRequestToken
        {
            get { return this._clientRequestToken; }
            set { this._clientRequestToken = value; }
        }

        // Check to see if ClientRequestToken property is set
        internal bool IsSetClientRequestToken()
        {
            return this._clientRequestToken != null;
        }

        /// <summary>
        /// Gets and sets the property Filters. 
        /// <para>
        /// Filters for technical cue or shot detection.
        /// </para>
        /// </summary>
        public StartSegmentDetectionFilters Filters
        {
            get { return this._filters; }
            set { this._filters = value; }
        }

        // Check to see if Filters property is set
        internal bool IsSetFilters()
        {
            return this._filters != null;
        }

        /// <summary>
        /// Gets and sets the property JobTag. 
        /// <para>
        /// An identifier you specify that's returned in the completion notification that's published
        /// to your Amazon Simple Notification Service topic. For example, you can use <code>JobTag</code>
        /// to group related jobs and identify them in the completion notification.
        /// </para>
        /// </summary>
        [AWSProperty(Min=1, Max=1024)]
        public string JobTag
        {
            get { return this._jobTag; }
            set { this._jobTag = value; }
        }

        // Check to see if JobTag property is set
        internal bool IsSetJobTag()
        {
            return this._jobTag != null;
        }

        /// <summary>
        /// Gets and sets the property NotificationChannel. 
        /// <para>
        /// The ARN of the Amazon SNS topic to which you want Amazon Rekognition Video to publish
        /// the completion status of the segment detection operation. Note that the Amazon SNS
        /// topic must have a topic name that begins with <i>AmazonRekognition</i> if you are
        /// using the AmazonRekognitionServiceRole permissions policy to access the topic.
        /// </para>
        /// </summary>
        public NotificationChannel NotificationChannel
        {
            get { return this._notificationChannel; }
            set { this._notificationChannel = value; }
        }

        // Check to see if NotificationChannel property is set
        internal bool IsSetNotificationChannel()
        {
            return this._notificationChannel != null;
        }

        /// <summary>
        /// Gets and sets the property SegmentTypes. 
        /// <para>
        /// An array of segment types to detect in the video. Valid values are TECHNICAL_CUE and
        /// SHOT.
        /// </para>
        /// </summary>
        [AWSProperty(Required=true, Min=1)]
        public List<string> SegmentTypes
        {
            get { return this._segmentTypes; }
            set { this._segmentTypes = value; }
        }

        // Check to see if SegmentTypes property is set
        internal bool IsSetSegmentTypes()
        {
            return this._segmentTypes != null && this._segmentTypes.Count > 0; 
        }

        /// <summary>
        /// Gets and sets the property Video.
        /// </summary>
        [AWSProperty(Required=true)]
        public Video Video
        {
            get { return this._video; }
            set { this._video = value; }
        }

        // Check to see if Video property is set
        internal bool IsSetVideo()
        {
            return this._video != null;
        }

    }
}