using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;


namespace CDAValidator
{
    /// <summary>
    /// Interaction logic for SchematronTransWindow.xaml
    /// </summary>
    public partial class SchematronTransWindow : Window
    {
        public SchematronTransWindow()
        {
            InitializeComponent();
            
        }
        /// <summary>
        /// Replaces / with \ in the path.
        /// </summary>
        /// <param name="path"></param>
        private void correctPath(ref string path)
        {
            path = path.Replace('/', '\\');
            string invalid = new string(System.IO.Path.GetInvalidPathChars());

            foreach (char c in invalid)
            {
                path = path.Replace(c.ToString(), "");
            }

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
        }

        private void btnBrowseISO_Click(object sender, RoutedEventArgs e)
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            try
            {
                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    tbPathISO.Text = dialog.SelectedPath + @"\";
                    string path = tbPathISO.Text;
                    correctPath(ref path);
                    tbPathISO.Text = path;
                    tbPathISO.CaretIndex = tbPathISO.Text.Length;
                    var rect = tbPathISO.GetRectFromCharacterIndex(tbPathISO.CaretIndex);
                    tbPathISO.ScrollToHorizontalOffset(rect.Right);

                }                
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.ToString());
                logErrors(ex);
            }
        }

        private void btnBrowseELGA_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string DateiPfad = dialog.FileName;
                tbPathELGA.Text = DateiPfad;
            }
        }

        private void btnStartTrans_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                System.Windows.Forms.MessageBoxEx.Show("Transformation gestartet - Bitte warten...", "Info" ,2000);
                Transformator trans = new Transformator(tbPathISO.Text, tbPathELGA.Text);
                System.Windows.MessageBox.Show("Transformation war erfolgreich. Die Datei Test-Transformed-Stage3.xsd wird zur Validation verwendet","Transformation erfolgreich",MessageBoxButton.OK);
            }
            catch (Exception ex)
            {
                logErrors(ex);
                System.Windows.MessageBox.Show("Transformation war nicht erfolgreich - bitte .log Datei ansehen", "Transformation nicht erfolgreich", MessageBoxButton.OK);
            }

            this.Close();
        }

        private void logErrors(Exception ex)
        {
            Logging.eventLog(ex);
            Logging.writeLog(ex.ToString());
        }

        private void btnCancel_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btninfo1_Click(object sender, RoutedEventArgs e)
        {

            MessageBoxResult result = System.Windows.MessageBox.Show("Bitte hier den Pfad der ELGA Schematrondatei für bildgebende Befunde angeben.\n Im selben Ordner wie diese Datei muss ein Ordner 'include' liegen, der die zu inkludierende Schematron Dateien entält. Zur Homepage gehen, um die Dateien herunterzuladen?", "Info ELGA Datei", MessageBoxButton.YesNoCancel);
            if (result == MessageBoxResult.Yes)
                System.Diagnostics.Process.Start("http://www.elga.gv.at/index.php?id=implementierungsleitfaden");
        }

        private void btnInfo2_Click(object sender, RoutedEventArgs e)
        {
            MessageBoxResult result = System.Windows.MessageBox.Show("Bitte hier den Pfad des Ordners angeben, in dem der Ordner 'Schematron' liegt, der die ISO Schematron Dateien enthält. Zur Homepage gehen, um die Dateien herunterzuladen?", "Info ISO Pfad", MessageBoxButton.YesNoCancel);

            if (result == MessageBoxResult.Yes)
                System.Diagnostics.Process.Start("http://www.schematron.com/implementation.html");
        }      
    }
}
