using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Packaging;
using System.Diagnostics;
using System.Windows;
using TaskIt.Views.Dialogs;
using TaskIt.Web.Services;

namespace TaskIt
{
    public partial class App
    {       
        private DataContext _dataContext;
       
        public App()
        {
            InitializeComponent();
            Startup += Application_Startup;
        }

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            InitializeContainer();
            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;
            ErrorChildWindow.CreateNew(e.ExceptionObject);
        }

        public DataContext DataContext
        {
            get { return _dataContext ?? (_dataContext = new DataContext()); }
        }
    }
}