using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace MediaBrowser.ServerApplication.Controls
{
    /// 
    /// Interaction logic for MultiItemUpdateNotification.xaml
    /// 
    public partial class MultiItemUpdateNotification : UserControl
    {
        /// 
        /// The logger
        /// 
        private readonly ILogger Logger;
        /// 
        /// Gets the children changed event args.
        /// 
        /// The children changed event args.
        private List Items
        {
            get { return DataContext as List; }
        }
        /// 
        /// Initializes a new instance of the  class.
        /// 
        public MultiItemUpdateNotification(ILogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException("logger");
            }
            Logger = logger;
            InitializeComponent();
            Loaded += MultiItemUpdateNotification_Loaded;
        }
        /// 
        /// Handles the Loaded event of the MultiItemUpdateNotification control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        void MultiItemUpdateNotification_Loaded(object sender, RoutedEventArgs e)
        {
            header.Text = string.Format("{0} New Items!", Items.Count);
            PopulateItems();
        }
        /// 
        /// Populates the items.
        /// 
        private void PopulateItems()
        {
            itemsPanel.Children.Clear();
            var items = Items;
            const int maxItemsToDisplay = 8;
            var index = 0;
            foreach (var item in items)
            {
                if (index >= maxItemsToDisplay)
                {
                    break;
                }
                // Try our best to find an image
                var path = GetImagePath(item);
                if (string.IsNullOrEmpty(path))
                {
                    continue;
                }
                Image img;
                try
                {
                    img = App.Instance.GetImage(path);
                }
                catch (FileNotFoundException)
                {
                    Logger.Error("Image file not found {0}", path);
                    continue;
                }
                img.Stretch = Stretch.Uniform;
                img.Margin = new Thickness(0, 0, 5, 5);
                img.ToolTip = ItemUpdateNotification.GetDisplayName(item, true);
                RenderOptions.SetBitmapScalingMode(img, BitmapScalingMode.Fant);
                itemsPanel.Children.Add(img);
                index++;
            }
        }
        /// 
        /// Gets the image path.
        /// 
        /// The item.
        /// System.String.
        internal static string GetImagePath(BaseItem item)
        {
            // Try our best to find an image
            var path = item.PrimaryImagePath;
            if (string.IsNullOrEmpty(path) && item.BackdropImagePaths != null)
            {
                path = item.BackdropImagePaths.FirstOrDefault();
            }
            if (string.IsNullOrEmpty(path))
            {
                path = item.GetImage(ImageType.Thumb);
            }
            if (string.IsNullOrEmpty(path))
            {
                path = item.GetImage(ImageType.Art);
            }
            if (string.IsNullOrEmpty(path))
            {
                path = item.GetImage(ImageType.Logo);
            }
            if (string.IsNullOrEmpty(path))
            {
                path = item.GetImage(ImageType.Disc);
            }
            return path;
        }
    }
}