using System;
using System.Windows.Forms;
using CodeStatistics.Forms;
using CodeStatistics.Data;
using CodeStatistics.Input.Methods;
using CodeStatisticsCore.Input;

namespace CodeStatistics{
    static class Program{
        public static ProgramConfiguration Config { get; private set; }

        [STAThread]
        static void Main(string[] args){
            Application.EnableVisualStyles();

#if WINDOWS
            if (IsRunningMono()){
                MessageBox.Show(Lang.Get["ErrorLaunchMonoOnWindowsBuild"],Lang.Get["ErrorLaunchTitle"],MessageBoxButtons.OK,MessageBoxIcon.Error);
                return;
            }
#endif

            ProgramArguments programArgs = new ProgramArguments(args,ProgramConfiguration.Validate);

            if (programArgs.HasError){
                MessageBox.Show(programArgs.Error,Lang.Get["ErrorInvalidArgsTitle"],MessageBoxButtons.OK,MessageBoxIcon.Error);
                return;
            }

            Config = new ProgramConfiguration(programArgs);
            Start();

            IOUtils.CleanupTemporaryDirectory();
        }

        private static void Start(){
            IInputMethod immediateInput = Config.GetImmediateInputMethod();

            if (immediateInput != null){
                new ProjectLoadForm(immediateInput).ShowDialog();
                return;
            }

            while(true){
                MainForm form = new MainForm();
            
                if (form.ShowDialog() == DialogResult.OK){
                    DialogResult result = new ProjectLoadForm(form.InputMethod).ShowDialog();
                    if (result == DialogResult.Abort)return;
                }
                else return;
            }
        }

        public static bool IsRunningMono(){
            return Type.GetType("Mono.Runtime") != null;
        }
    }
}