using MeterVision.Config;
using MeterVision.model;
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.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace MeterVision.Dlg
{
    /// <summary>
    /// LogViewerWindow.xaml 的交互逻辑
    /// </summary>
    public partial class LogViewerWindow : Window
    {
        private readonly object DetailItem;

        //public LogViewerWindow(string imagePath,string logFilePath)
        //{
        //    InitializeComponent();
        //    LoadContent(imagePath, logFilePath);
        //}

        public LogViewerWindow(object detailItem)
        {
            InitializeComponent();

            int width = CfginiItem.GetConfigItem().LogvSize_Width;
            int height = CfginiItem.GetConfigItem().LogvSize_Heigth;
            if(width != 0 && height!= 0)
            {
                this.Width = width;
                this.Height = height;
            }

            int leftWidth = CfginiItem.GetConfigItem().LogvLeftWidth;
            if (leftWidth != 0)
            {
                ColumnDefinition leftColum = gridMid.ColumnDefinitions[0];
                leftColum.Width = new GridLength(leftWidth);
            }

            DetailItem = detailItem;
            InitLoad();
        }

        //加载登录的信息
        private void InitLoad()
        {
            ucImageSrc.ImageName = "原始图片";
            ucImageDst.ImageName = "结果图片";
            if (DetailItem is PatchDetailItem patchDetailItem)
            {
                ucImageSrc.ImageSource = patchDetailItem.SrcImage;
                ucImageDst.ImageSource = patchDetailItem.DstImage;
                LoadLogContent(patchDetailItem.LogPath);
            }
            else if (DetailItem is SingleDetailItem singleDetailItem)
            {
                ucImageSrc.ImageSource = singleDetailItem.SrcImage;
                ucImageDst.ImageSource = singleDetailItem.DstImage;
                LoadLogContent(singleDetailItem.LogPath);
            }
        }

        // 加载图片和日志内容
        private void LoadContent(string imagePath, string logFilePath)
        {
            try
            {
                // 加载并插入图片
                InsertImageAtTop(imagePath);

                // 加载并插入日志内容
                LoadLogContent(logFilePath);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"加载内容时出错: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        // 在 RichTextBox 顶部插入图片
        private void InsertImageAtTop(string imagePath)
        {
            try
            {
                // 创建一个 BitmapImage 并加载图片
                BitmapImage bitmap = new BitmapImage();
                bitmap.BeginInit();
                bitmap.UriSource = new Uri(imagePath, UriKind.Absolute);
                bitmap.EndInit();

                // 创建 Image 并设置图片源
                Image image = new Image
                {
                    Source = bitmap,
                    Width = 320, // 设置图片宽度
                    Height = 320, // 设置图片高度
                    Margin = new Thickness(0, 0, 0, 10) // 设置图片底部的间距
                };

                // 将 Image 包裹在 InlineUIContainer 中
                InlineUIContainer container = new InlineUIContainer(image);

                // 创建段落并将图片加入段落
                Paragraph imageParagraph = new Paragraph(container);

                // 将图片段落插入到文档的顶部
                FlowDocument document = RichTxtContentBox.Document;
                if (document.Blocks.Count > 0)
                {
                    document.Blocks.InsertBefore(document.Blocks.FirstBlock, imageParagraph);
                }
                else
                {
                    document.Blocks.Add(imageParagraph); // 如果文档为空，直接添加
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"插入图片时出错: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }


        // 加载日志文件内容
        private void LoadLogContent(string filePath)
        {
            try
            {
                if (File.Exists(filePath))
                {
                    string content = File.ReadAllText(filePath);

                    // 创建段落并将日志内容添加到段落
                    Paragraph logParagraph = new Paragraph(new Run(content));

                    // 将日志段落添加到 RichTextBox 的文档中
                    RichTxtContentBox.Document.Blocks.Add(logParagraph);
                }
                else
                {
                    MessageBox.Show("日志文件未找到！", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"加载日志文件时出错: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        //记录位置
        private void Window_Closed(object sender, EventArgs e)
        {
            //最大化后的尺寸也记录
            //if (WindowState != WindowState.Maximized)
            //{
                int width = (int)this.Width;
                int height = (int)this.Height;
                string dialogSize = $"{width},{height}";
            //CfginiItem.GetConfigItem().DialogStandSize = dialogSize;
            CfginiItem.GetConfigItem().LogvSize = dialogSize;
            //}

            //获取左边的宽度
            ColumnDefinition leftColumn = gridMid.ColumnDefinitions[0];
            int leftWidth = (int)leftColumn.ActualWidth;
            if(leftWidth > 0)
            {
                CfginiItem.GetConfigItem().LogvLeftWidth = leftWidth;
            }


        }

        private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
        {

        }

        private void Window_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {

        }

        private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if(e.Key == Key.Escape)
            {
                this.Close();
            }
        }

        private void LogScrollTop_Click(object sender, RoutedEventArgs e)
        {
            RichTxtContentBox.ScrollToHome();
        }

        private void LogScrollBottom_Click(object sender, RoutedEventArgs e)
        {
            RichTxtContentBox.ScrollToEnd();
        }

        private void AiLogSave_Click(object sender, RoutedEventArgs e)
        {
            if (DetailItem == null) return;

            string logPath="";
            if (DetailItem is PatchDetailItem patchDetailItem)
            {
                logPath = patchDetailItem.LogPath;
            }
            else if (DetailItem is SingleDetailItem singleDetailItem)
            {
                logPath = singleDetailItem.LogPath;
            }

            if (!string.IsNullOrEmpty(logPath))
            {
                ThisApp.ExportAiLog(logPath);
            }
        }
        //--------------------------------
    }
}
