using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
namespace MediaBrowser.Controller.Entities.Audio
{
    /// 
    /// Class MusicAlbum
    /// 
    public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasTags
    {
        public List SoundtrackIds { get; set; }
        
        public MusicAlbum()
        {
            Artists = new List();
            SoundtrackIds = new List();
            Tags = new List();
        }
        public string LastFmImageUrl { get; set; }
        public string LastFmImageSize { get; set; }
        /// 
        /// Gets or sets the tags.
        /// 
        /// The tags.
        public List Tags { get; set; }
        /// 
        /// 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; }
        }
        /// 
        /// Determines whether the specified artist has artist.
        /// 
        /// The artist.
        /// true if the specified artist has artist; otherwise, false.
        public bool HasArtist(string artist)
        {
            return string.Equals(AlbumArtist, artist, StringComparison.OrdinalIgnoreCase)
                   || Artists.Contains(artist, StringComparer.OrdinalIgnoreCase);
        }
        public string AlbumArtist { get; set; }
        public List Artists { get; set; }
        /// 
        /// Gets the user data key.
        /// 
        /// System.String.
        public override string GetUserDataKey()
        {
            var id = this.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup);
            if (!string.IsNullOrEmpty(id))
            {
                return "MusicAlbum-MusicBrainzReleaseGroup-" + id;
            }
            id = this.GetProviderId(MetadataProviders.Musicbrainz);
            if (!string.IsNullOrEmpty(id))
            {
                return "MusicAlbum-Musicbrainz-" + id;
            }
            return base.GetUserDataKey();
        }
    }
    public class MusicAlbumDisc : Folder
    {
    }
}