using Elwig.Helpers;
using System.Diagnostics;
using System.Linq;
using System.Windows;

namespace Elwig.Windows {
    public partial class LogWindow : Window {

        public LogWindow() {
            InitializeComponent();
            WindowState = WindowState.Maximized;
        }

        private void Window_Loaded(object sender, RoutedEventArgs evt) {
            var log = Utils.GetLogEntries();
            EventList.ItemsSource = log
                .Select(e => new {
                    Event = e,
                    Lines = e.Message.Split('\n').ToArray(),
                })
                .Select(e => new {
                    e.Event,
                    Exception = e.Lines.FirstOrDefault(l => l.StartsWith("Exception Info: "))?[16..].Trim().Split(':', 2),
                    Location = e.Lines.FirstOrDefault(l => l.StartsWith("   at Elwig."))?[5..].Trim(),
                })
                .Select(e => new {
                    e.Event,
                    e.Exception,
                    ExceptionName = e.Exception?[0].Trim(),
                    ExceptionMessage = e.Exception?.Length >= 2 ? e.Exception?[1].Trim() : null,
                    e.Location,
                })
                .OrderByDescending(e => e.Event.TimeGenerated)
                .ToList();
            EventList.SelectedIndex = 0;
        }

        private void EventList_SelectionChanged(object sender, RoutedEventArgs evt) {
            var item = EventList.SelectedItem;
            var t = item.GetType();
            var p = t.GetProperty("Event")!;
            EventData.Text = ((EventLogEntry)p.GetValue(item)!).Message;
        }
    }
}