using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
namespace MediaBrowser.Controller.Entities.Audio
{
    /// 
    /// Class MusicAlbum
    /// 
    public class MusicAlbum : Folder
    {
        /// 
        /// Songs will group into us so don't also include us in the index
        /// 
        /// true if [include in index]; otherwise, false.
        [IgnoreDataMember]
        public override bool IncludeInIndex
        {
            get
            {
                return false;
            }
        }
        /// 
        /// Override this to true if class should be grouped under a container in indicies
        /// The container class should be defined via IndexContainer
        /// 
        /// true if [group in index]; otherwise, false.
        [IgnoreDataMember]
        public override bool GroupInIndex
        {
            get
            {
                return true;
            }
        }
        /// 
        /// The unknwon artist
        /// 
        private static readonly MusicArtist UnknwonArtist = new MusicArtist {Name = ""};
        /// 
        /// Override this to return the folder that should be used to construct a container
        /// for this item in an index.  GroupInIndex should be true as well.
        /// 
        /// The index container.
        [IgnoreDataMember]
        public override Folder IndexContainer
        {
            get { return Parent as MusicArtist ?? UnknwonArtist; }
        }
        /// 
        /// Override to point to first child (song) if not explicitly defined
        /// 
        /// The primary image path.
        [IgnoreDataMember]
        public override string PrimaryImagePath
        {
            get
            {
                if (base.PrimaryImagePath == null)
                {
                    var child = Children.FirstOrDefault();
                    return child == null ? base.PrimaryImagePath : child.PrimaryImagePath;
                }
                return base.PrimaryImagePath;
            }
            set
            {
                base.PrimaryImagePath = value;
            }
        }
        /// 
        /// Override to point to first child (song)
        /// 
        /// The production year.
        public override int? ProductionYear
        {
            get
            {
                var child = Children.FirstOrDefault();
                return child == null ? base.ProductionYear : child.ProductionYear;
            }
            set
            {
                base.ProductionYear = value;
            }
        }
        /// 
        /// Override to point to first child (song)
        /// 
        /// The genres.
        public override List Genres
        {
            get
            {
                var child = Children.FirstOrDefault();
                return child == null ? base.Genres : child.Genres;
            }
            set
            {
                base.Genres = value;
            }
        }
        /// 
        /// Override to point to first child (song)
        /// 
        /// The studios.
        public override List Studios
        {
            get
            {
                var child = Children.FirstOrDefault();
                return child == null ? base.Studios : child.Studios;
            }
            set
            {
                base.Studios = value;
            }
        }
    }
}