using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Packaging;
using System.Windows;
using System.Windows.Controls;
using System.Diagnostics;

namespace DynamicXAPLoading
{
    public partial class App : Application
    {
        public App()
        {
            this.Startup += this.Application_Startup;
            this.UnhandledException += this.Application_UnhandledException;

            InitializeComponent();
        }

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            InitializeContainer();
            this.RootVisual = new MainPage();
        }

        private static void InitializeContainer()
        {
            var catalog = new PackageCatalog();
            catalog.AddPackage(Package.Current);
            var container = new CompositionContainer(catalog);
            container.ComposeExportedValue(catalog);
            CompositionHost.Initialize(container);
        }

        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            // If the app is running outside of the debugger then report the exception using
            // a ChildWindow control.
            if (Debugger.IsAttached)
            {
                return;
            }

            // NOTE: This will allow the application to continue running after an exception has been thrown
            // but not handled. 
            // For production applications this error handling should be replaced with something that will 
            // report the error to the website and stop the application.
            e.Handled = true;
            ChildWindow errorWin = new ErrorWindow(e.ExceptionObject);
            errorWin.Show();
        }
    }
}