using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Model.Entities;
using System;
namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio
{
    /// 
    /// Class AudioResolver
    /// 
    public class AudioResolver : ItemResolver
    {
        private readonly ILibraryManager _libraryManager;
        public AudioResolver(ILibraryManager libraryManager)
        {
            _libraryManager = libraryManager;
        }
        /// 
        /// Gets the priority.
        /// 
        /// The priority.
        public override ResolverPriority Priority
        {
            get { return ResolverPriority.Last; }
        }
        /// 
        /// Resolves the specified args.
        /// 
        /// The args.
        /// Entities.Audio.Audio.
        protected override Controller.Entities.Audio.Audio Resolve(ItemResolveArgs args)
        {
            // Return audio if the path is a file and has a matching extension
            if (!args.IsDirectory)
            {
                if (_libraryManager.IsAudioFile(args.Path))
                {
                    var collectionType = args.GetCollectionType();
                    var isMixed = string.IsNullOrWhiteSpace(collectionType);
                    // For conflicting extensions, give priority to videos
                    if (isMixed && _libraryManager.IsVideoFile(args.Path))
                    {
                        return null;
                    }
                    var isStandalone = args.Parent == null;
                    if (isStandalone ||
                        string.Equals(collectionType, CollectionType.Music, StringComparison.OrdinalIgnoreCase) ||
                        isMixed)
                    {
                        return new Controller.Entities.Audio.Audio();
                    }
                }
            }
            return null;
        }
    }
}