using System;

/*
    Copyright (c) 2010 flixmonk. (http://DVDSwarm.codeplex.com)
    All Rights Reserved.
        
    Redistribution and use in source and binary forms, with or without modification,
    are permitted provided that the following conditions are met:
        
    * Redistributions of source code must retain the above copyright notice, this list
      of conditions and the following disclaimer.
        
    * Redistributions in binary form must reproduce the above copyright notice, this
    list of conditions and the following disclaimer in the documentation and/or other
    materials provided with the distribution. 
        
    * Neither the name of The Flixmonk nor the names of its contributors may be used to
    endorse or promote products derived from this software without specific prior written
    permission.
        
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
    SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
    OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
namespace DVDSwarm
{
    /// <summary>
    /// Contains information about a program chain to demux.
    /// </summary>
    public class DemuxPgcSelection
    {
        #region Fields

        private Int32 _angle = 1;
        private string[] _audioIDs = null;
        private string[] _audioOutputFilenames = null;
        private string _ifoFilename = string.Empty;
        private Int32 _pgc = 0;
        private string[] _subtitleIDs = null;
        private string[] _subtitleOutputFilenames = null;
        private Int32 _titleset = 0;
        private Int64 _videoLength = 0;
        private string _videoID = string.Empty;
        private string _videoOutputFilename = string.Empty;
        private string[] _vobFilenames = null;
        
        #endregion

        #region Properties

        /// <summary>
        /// Gets and sets the angle number to demux.
        /// </summary>
        public Int32 Angle
        {
            get
            {
                return _angle;
            }
            set
            {
                _angle = value;
            }
        }
        /// <summary>
        /// Gets and sets the audio stream track numbers to demux. If the property is an
        /// empty string array, no audio streams will be demuxed. The array is synced to
        /// the values of the AudioOutputFilenames property.
        /// </summary>
        public string[] AudioIDs
        {
            get
            {
                return _audioIDs;
            }
            set
            {
                _audioIDs = value;
            }
        }
        /// <summary>
        /// Gets and sets the audio stream track number(s) to demux. The array is synced to the values of the
        /// AudioIDs property.
        /// </summary>
        public string[] AudioOutputFilenames
        {
            get
            {
                return _audioOutputFilenames;
            }
            set
            {
                _audioOutputFilenames = value;
            }
        }
        /// <summary>
        /// Gets and sets the filename of the IFO.
        /// </summary>
        public string IfoFilename
        {
            get
            {
                return _ifoFilename;
            }
            set
            {
                _ifoFilename = value;
            }
        }
        /// <summary>
        /// Gets and sets the program chain number containing the streams to demux.
        /// </summary>
        public Int32 Pgc
        {
            get
            {
                return _pgc;
            }
            set
            {
                _pgc = value;
            }
        }
        /// <summary>
        /// Gets and sets the subtitle stream track numbers to demux. If the property is an
        /// empty string array, no subtitle streams will be demuxed. The array is synced to
        /// the values of the SubtitleOutputFilenames property.
        /// </summary>
        public string[] SubtitleIDs
        {
            get
            {
                return _subtitleIDs;
            }
            set
            {
                _subtitleIDs = value;
            }
        }
        /// <summary>
        /// Gets and sets the subtitle output filenames. The array is synced to the values of the
        /// SubtitleIDs property.
        /// </summary>
        public string[] SubtitleOutputFilenames
        {
            get
            {
                return _subtitleOutputFilenames;
            }
            set
            {
                _subtitleOutputFilenames = value;
            }
        }
        /// <summary>
        /// Gets and sets the title set number containing the streams to demux.
        /// </summary>
        public Int32 Titleset
        {
            get
            {
                return _titleset;
            }
            set
            {
                _titleset = value;
            }
        }
        /// <summary>
        /// Gets and sets the video stream length in bytes.
        /// </summary>
        public Int64 VideoLength
        {
            get
            {
                return _videoLength;
            }
            set
            {
                _videoLength = value;
            }
        }
        /// <summary>
        /// Gets and sets the video stream track number to demux. If the property is an
        /// empty string, the video will not be demuxed. The string is associated with the
        /// VideoOutputFilename property.
        /// </summary>
        public string VideoID
        {
            get
            {
                return _videoID;
            }
            set
            {
                _videoID = value;
            }
        }
        /// <summary>
        /// Gets and sets the video stream  output filename. The string is associated with the
        /// VideoID property.
        /// </summary>
        public string VideoOutputFilename
        {
            get
            {
                return _videoOutputFilename;
            }
            set
            {
                _videoOutputFilename = value;
            }
        }
        /// <summary>
        /// Gets and sets the filename(s) of the vob file(s) which contain the streams to demux.
        /// </summary>
        public string[] VobFilenames
        {
            get
            {
                return _vobFilenames;
            }
            set
            {
                _vobFilenames = value;
            }
        }
        
        #endregion
    }
}
