using System;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using Baza_Reklam.Classes;

namespace Baza_Reklam
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
#if !DEBUG
            CustomExceptionHandler exceptionHandler = new CustomExceptionHandler();
            Application.ThreadException += exceptionHandler.OnThreadException;
#endif

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Logowanie logowanie = new Logowanie();

            if (logowanie.ShowDialog() == DialogResult.OK)
            {
                Application.Run(new MDIBazaReklam());
            }
        }
    }

    // Creates a class to handle the exception event.
    internal class CustomExceptionHandler
    {

        // Handles the exception event.
        public void OnThreadException(object sender, ThreadExceptionEventArgs t)
        {
            try
            {
                ShowThreadExceptionDialog(t.Exception);
            }
            catch
            {
                try
                {
                    MessageBox.Show("Fatal Error - aplikacja zostanie zamknięta", "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
                finally
                {
                    Application.Exit();
                }
            }    
        }

        // Creates the error message and displays it.
        private static void ShowThreadExceptionDialog(Exception exception)
        {
            string userName = User.Instance().Login;
            if (string.IsNullOrEmpty(userName)) userName = "[not_found]";

            Logger.LogException(exception, userName, DateTime.Now);
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Wystąpił nieoczekiwany wyjątek.");
            sb.AppendLine(string.Empty);
            sb.AppendLine("Informacje dotyczące tego błędu zostały automatycznie przekazane programiście.");
            sb.AppendLine(string.Empty);
            sb.AppendLine("Data i czas: " + DateTime.Now);
            sb.AppendLine("Użytkownik: " + userName);
            MessageBox.Show(sb.ToString(), "Błąd w aplikacji Baza Reklam", MessageBoxButtons.OK, MessageBoxIcon.Stop);
        }
    }
}