using MediaBrowser.Model.DTO;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net;
using MediaBrowser.Plugins.DefaultTheme.Controls.Details;
using MediaBrowser.Plugins.DefaultTheme.Resources;
using MediaBrowser.UI;
using MediaBrowser.UI.Controller;
using MediaBrowser.UI.Pages;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
namespace MediaBrowser.Plugins.DefaultTheme.Pages
{
    /// 
    /// Interaction logic for DetailPage.xaml
    /// 
    public partial class DetailPage : BaseDetailPage
    {
        /// 
        /// Initializes a new instance of the  class.
        /// 
        /// The item id.
        public DetailPage(string itemId)
            : base(itemId)
        {
            InitializeComponent();
            BtnOverview.Click += BtnOverview_Click;
            BtnChapters.Click += BtnChapters_Click;
            BtnMediaInfo.Click += BtnDetails_Click;
            BtnPerformers.Click += BtnPerformers_Click;
            BtnTrailers.Click += BtnTrailers_Click;
            BtnSpecialFeatures.Click += BtnSpecialFeatures_Click;
            BtnGallery.Click += BtnGallery_Click;
        }
        /// 
        /// Handles the Click event of the BtnGallery control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        void BtnGallery_Click(object sender, RoutedEventArgs e)
        {
            PrimaryImageGrid.Visibility = Visibility.Collapsed;
            ShowDetailControl(BtnGallery, new ItemGallery { });
        }
        /// 
        /// Handles the Click event of the BtnSpecialFeatures control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        void BtnSpecialFeatures_Click(object sender, RoutedEventArgs e)
        {
            PrimaryImageGrid.Visibility = Visibility.Collapsed;
            ShowDetailControl(BtnSpecialFeatures, new ItemSpecialFeatures { });
        }
        /// 
        /// Handles the Click event of the BtnTrailers control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        void BtnTrailers_Click(object sender, RoutedEventArgs e)
        {
            PrimaryImageGrid.Visibility = Visibility.Collapsed;
            ShowDetailControl(BtnTrailers, new ItemTrailers { });
        }
        /// 
        /// Handles the Click event of the BtnDetails control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        void BtnDetails_Click(object sender, RoutedEventArgs e)
        {
            PrimaryImageGrid.Visibility = Visibility.Visible;
            ShowDetailControl(BtnMediaInfo, new ItemMediaInfo { });
        }
        /// 
        /// Handles the Click event of the BtnChapters control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        void BtnChapters_Click(object sender, RoutedEventArgs e)
        {
            PrimaryImageGrid.Visibility = Visibility.Collapsed;
            ShowDetailControl(BtnChapters, new ItemChapters { });
        }
        /// 
        /// Handles the Click event of the BtnOverview control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        void BtnOverview_Click(object sender, RoutedEventArgs e)
        {
            PrimaryImageGrid.Visibility = Visibility.Visible;
            ShowDetailControl(BtnOverview, new ItemOverview { });
        }
        /// 
        /// Handles the Click event of the BtnPerformers control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        void BtnPerformers_Click(object sender, RoutedEventArgs e)
        {
            PrimaryImageGrid.Visibility = Visibility.Collapsed;
            ShowDetailControl(BtnPerformers, new ItemPerformers { });
        }
        /// 
        /// Handles the Click event of the BtnQueue control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        void BtnQueue_Click(object sender, RoutedEventArgs e)
        {
            Queue();
        }
        /// 
        /// Called when [loaded].
        /// 
        protected override async void OnLoaded()
        {
            base.OnLoaded();
            if (Item != null)
            {
                await AppResources.Instance.SetPageTitle(Item);
            }
        }
        /// 
        /// Called when [item changed].
        /// 
        protected override async void OnItemChanged()
        {
            base.OnItemChanged();
            var pageTitleTask = AppResources.Instance.SetPageTitle(Item);
            BtnOverview_Click(null, null);
            RenderItem();
            await pageTitleTask;
        }
        /// 
        /// Renders the item.
        /// 
        private async void RenderItem()
        {
            Task primaryImageTask = null;
            if (Item.HasPrimaryImage)
            {
                PrimaryImage.Visibility = Visibility.Visible;
                primaryImageTask = App.Instance.GetRemoteBitmapAsync(UIKernel.Instance.ApiClient.GetImageUrl(Item, new ImageOptions
                {
                    ImageType = ImageType.Primary,
                    Quality = 100
                }));
            }
            else
            {
                SetDefaultImage();
            }
            if (Item.IsType("movie") || Item.IsType("trailer"))
            {
                TxtName.Visibility = Visibility.Collapsed;
            }
            else
            {
                var name = Item.Name;
                if (Item.IndexNumber.HasValue)
                {
                    name = Item.IndexNumber.Value + " - " + name;
                    if (Item.ParentIndexNumber.HasValue)
                    {
                        name = Item.ParentIndexNumber.Value + "." + name;
                    }
                }
                TxtName.Text = name;
                TxtName.Visibility = Visibility.Visible;
            }
            if (Item.Taglines != null && Item.Taglines.Count > 0)
            {
                Tagline.Visibility = Visibility.Visible;
                Tagline.Text = Item.Taglines[0];
            }
            else
            {
                Tagline.Visibility = Visibility.Collapsed;
            }
            BtnGallery.Visibility = ItemGallery.GetImages(Item).Count > 0 ? Visibility.Visible : Visibility.Collapsed;
            BtnTrailers.Visibility = Item.HasTrailer ? Visibility.Visible : Visibility.Collapsed;
            BtnSpecialFeatures.Visibility = Item.SpecialFeatureCount > 0 ? Visibility.Visible : Visibility.Collapsed;
            BtnPerformers.Visibility = Item.People != null && Item.People.Length > 0 ? Visibility.Visible : Visibility.Collapsed;
            BtnChapters.Visibility = Item.Chapters != null && Item.Chapters.Count > 0 ? Visibility.Visible : Visibility.Collapsed;
            if (primaryImageTask != null)
            {
                try
                {
                    PrimaryImage.Source = await primaryImageTask;
                }
                catch (HttpException)
                {
                    SetDefaultImage();
                }
            }
        }
        /// 
        /// Sets the default image.
        /// 
        private void SetDefaultImage()
        {
            PrimaryImage.Visibility = Visibility.Collapsed;
        }
        /// 
        /// Handles the 1 event of the Button_Click control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Play();
        }
        /// 
        /// Handles the 2 event of the Button_Click control.
        /// 
        /// The source of the event.
        /// The  instance containing the event data.
        private async void Button_Click_2(object sender, RoutedEventArgs e)
        {
            await UIKernel.Instance.PlaybackManager.StopAllPlayback();
        }
        /// 
        /// Shows the detail control.
        /// 
        /// The button.
        /// The element.
        private void ShowDetailControl(Button button, BaseDetailsControl element)
        {
            DetailContent.Content = element;
            element.Item = Item;
        }
    }
}