using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;

namespace MatterHackers.MatterControl.Testing
{
    public class TestingDispatch
    {
        bool hadErrors = false;
        public bool HadErrors { get { return hadErrors; } }

        string errorLogFileName = null;
        public TestingDispatch()
        {
            string exePath = Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location );
            errorLogFileName = Path.Combine(exePath, "ErrorLog.txt");
            string firstLine = string.Format("MatterControl Errors: {0:yyyy-MM-dd hh:mm:ss tt}", DateTime.Now);
            using (StreamWriter file = new StreamWriter(errorLogFileName))
            {
                file.WriteLine(firstLine);
            }
        }

        public void RunTests(string[] testCommands)
        {
            try { ReleaseTests.AssertDebugNotDefined(); }
            catch (Exception e) { DumpException(e); }

            try { MatterHackers.GCodeVisualizer.GCodeFile.AssertDebugNotDefined(); }
            catch (Exception e) { DumpException(e); }

            try { MatterHackers.Agg.Graphics2D.AssertDebugNotDefined(); }
            catch (Exception e) { DumpException(e); }

            try { MatterHackers.Agg.UI.SystemWindow.AssertDebugNotDefined(); }
            catch (Exception e) { DumpException(e); }

            if (!HadErrors)
            {
                File.Delete(errorLogFileName);
            }
        }

        void DumpException(Exception e)
        {
            hadErrors = true;
            using (StreamWriter w = File.AppendText(errorLogFileName))
            {
                w.WriteLine(e.Message);
                w.Write(e.StackTrace);
                w.WriteLine();
            }
        }
    }
}
