using System;
using System.IO;
using System.Windows;

using Microsoft.Win32;
using Excel = Microsoft.Office.Interop.Excel;

using Newtonsoft.Json;
using System.Reflection;
using C4IT.Logging;
using static C4IT.Logging.cLogManager;

namespace FasdExcelToJsonConverter
{
    public partial class MainWindow : Window
    {
        #region Properties

        #region SelectedFile

        public static readonly DependencyProperty SelectedFileProperty =
            DependencyProperty.Register("SelectedFile", typeof(string), typeof(MainWindow), new PropertyMetadata(""));

        public string SelectedFile
        {
            get { return (string)GetValue(SelectedFileProperty); }
            set { SetValue(SelectedFileProperty, value); }
        }

        #endregion

        private readonly Excel.Application excelApp = new Excel.Application();
        private Excel.Workbook excelWorkBook;

        #endregion

        public MainWindow()
        {
            InitializeComponent();
        }

        private void SaveSelectedFileAsJson()
        {
            var CM = MethodBase.GetCurrentMethod();
            LogMethodBegin(CM);

            try
            {
                excelWorkBook = excelApp.Workbooks.Open(SelectedFile);
                cExcelHealthcardParser healthCardParser = new cExcelHealthcardParser(excelWorkBook);
                if (!healthCardParser.GetHealthcardDataFromExcel("%RawData%", out var healthCardData))
                    return;

                SaveFileDialog saveFileDialog = new SaveFileDialog
                {
                    Filter = "Json files (*.json)|*.json"
                };

                if (saveFileDialog.ShowDialog() == true)
                {
                    healthCardData.SampleDataName = Path.GetFileNameWithoutExtension(saveFileDialog.FileName);
                    healthCardData.SampleDataId = Guid.NewGuid();

                    if (healthCardData.SampleDataName == "Kohl, Carlos")
                        healthCardData.SampleDataId = new Guid("6180aa17-ba2d-455a-bf2f-ec4a075c2d64");
                    else if (healthCardData.SampleDataName == "Anwender, Peter")
                        healthCardData.SampleDataId = new Guid("436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b");
                    else if(healthCardData.SampleDataName == "Ticket, Timo")
                        healthCardData.SampleDataId = new Guid("42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a");
                    else if (healthCardData.SampleDataName == "Nichtanwender, Frauke")
                        healthCardData.SampleDataId = new Guid("2183284f-ba95-4eb8-ac13-6c2f70857e98");

                        using (StreamWriter streamWriter = File.CreateText(saveFileDialog.FileName))
                    {
                        streamWriter.WriteLine(JsonConvert.SerializeObject(healthCardData, Formatting.Indented));
                    }

                    MessageBox.Show("Sample Json was created.");
                }
            }
            catch (Exception E)
            {
                LogException(E);
            }
            finally
            {
                excelWorkBook.Close();
                excelApp.Quit();
                LogMethodEnd(CM);
            }
        }

        private void SearchFileButton_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog
            {
                Filter = "Excel Files|*.xls;*.xlsx;*.xlsm"
            };
            if (openFileDialog.ShowDialog() == true)
                SelectedFile = openFileDialog.FileName;
        }

        private void ConvertButton_Click(object sender, RoutedEventArgs e)
        {
            ConvertButton.IsEnabled = false;
            ConvertButton.Content = "Converting...";

            SaveSelectedFileAsJson();

            ConvertButton.IsEnabled = true;
            ConvertButton.Content = "Convert to JSON!";
        }
    }
}
