using System.Windows.Navigation;
using PhoneApp.NavigateToView.Core.Views;

namespace PhoneApp.NavigateToView.Core.Navigation
{
    public static class NavigationServiceExtensions
    {
        public static void NavigateToView<IView>(this NavigationService navigationService) where IView : Views.IView
        {
            Views.ViewInfosAttribute[] viewInfosAttribute = (Views.ViewInfosAttribute[])typeof(IView).GetCustomAttributes(typeof(Views.ViewInfosAttribute), false);
            if (viewInfosAttribute.Length == 1)
            {
                navigationService.Navigate(viewInfosAttribute[0].Uri);
            }
        }

        public static void NavigateToView<IView, ViewNavigationParametersType>(this NavigationService navigationService, ViewNavigationParametersType navigationParameters) where IView : Views.IView<ViewNavigationParametersType>
        {
            if (navigationParameters != null)
            {
                NavigatedEventHandler navigatedEventHandler = null;
                navigatedEventHandler = (s, e) =>
                {
                    ((IView<ViewNavigationParametersType>)e.Content).NavigationParameters = navigationParameters;
                    navigationService.Navigated -= navigatedEventHandler;
                };
                navigationService.Navigated += navigatedEventHandler;
                navigationService.NavigateToView<IView>();
            }
        }
    }
}