using System;
using System.Drawing.Imaging;
using System.Windows;
using System.Windows.Controls;
using NavisworksTransport.UI.WPF.ViewModels;

namespace NavisworksTransport.UI.WPF.Views
{
    /// <summary>
    /// PathEditingView.xaml 的交互逻辑
    /// 路径编辑页面视图 - 支持自动路径规划和手动路径编辑
    /// </summary>
    public partial class PathEditingView : UserControl
    {
        /// <summary>
        /// ViewModel属性，用于外部访问
        /// </summary>
        public PathEditingViewModel ViewModel { get; private set; }

        /// <summary>
        /// 构造函数，需要传入主ViewModel以支持统一状态栏
        /// </summary>
        /// <param name="mainViewModel">主ViewModel，用于统一状态栏</param>
        public PathEditingView(LogisticsControlViewModel mainViewModel)
        {
            InitializeComponent();
            
            // 创建ViewModel，传入主ViewModel引用
            ViewModel = new PathEditingViewModel(mainViewModel);
            DataContext = ViewModel;
            
            LogManager.Info("PathEditingView初始化完成 - 支持统一状态栏");
        }

        /// <summary>
        /// 清理资源
        /// </summary>
        public void Cleanup()
        {
            try
            {
                // 清理ViewModel
                ViewModel?.Cleanup();
                
                LogManager.Info("PathEditingView资源清理完成");
            }
            catch (Exception ex)
            {
                LogManager.Error($"PathEditingView清理失败: {ex.Message}");
            }
        }

        /// <summary>
        /// 路径列表中“时标”按钮点击，打开时间标签窗口（仅展示）
        /// </summary>
        private void OnTimeTagButtonClick(object sender, RoutedEventArgs e)
        {
            try
            {
                LogManager.Info("时标按钮被点击，准备打开TimeTagDialog窗口");
                
                var dlg = new TimeTagDialog();
                
                // 在Navisworks环境中，尝试找到合适的父窗口
                try
                {
                    // 尝试设置Owner为当前WPF窗口的顶级父窗口
                    var parentWindow = Window.GetWindow(this);
                    if (parentWindow != null)
                    {
                        dlg.Owner = parentWindow;
                        LogManager.Info("设置TimeTagDialog的Owner为当前窗口");
                    }
                    else
                    {
                        LogManager.Info("未找到父窗口，将以独立窗口方式显示TimeTagDialog");
                    }
                }
                catch (Exception ownerEx)
                {
                    LogManager.Warning($"设置Owner失败，将以独立窗口显示: {ownerEx.Message}");
                }
                
                dlg.ShowDialog();
                LogManager.Info("TimeTagDialog窗口显示完成");
            }
            catch (Exception ex)
            {
                LogManager.Error($"打开时间标签窗口失败: {ex.Message}");
                LogManager.Error($"异常详情: {ex}");
            }
        }
        
        /// <summary>
        /// 路径分析按钮点击事件，打开路径规划分析对话框
        /// </summary>
        private void OnPathAnalysisButtonClick(object sender, RoutedEventArgs e)
        {
            try
            {
                LogManager.Info("路径分析按钮被点击，准备打开PathAnalysisDialog窗口");
                
                var dlg = new PathAnalysisDialog();
                
                // 在Navisworks环境中，尝试找到合适的父窗口
                try
                {
                    // 尝试设置Owner为当前WPF窗口的顶级父窗口
                    var parentWindow = Window.GetWindow(this);
                    if (parentWindow != null)
                    {
                        dlg.Owner = parentWindow;
                        LogManager.Info("设置PathAnalysisDialog的Owner为当前窗口");
                    }
                    else
                    {
                        LogManager.Info("未找到父窗口，将以独立窗口方式显示PathAnalysisDialog");
                    }
                }
                catch (Exception ownerEx)
                {
                    LogManager.Warning($"设置Owner失败，将以独立窗口显示: {ownerEx.Message}");
                }
                
                dlg.ShowDialog();
                LogManager.Info("PathAnalysisDialog窗口显示完成");
            }
            catch (Exception ex)
            {
                LogManager.Error($"打开路径分析窗口失败: {ex.Message}");
                LogManager.Error($"异常详情: {ex}");
            }
        }

        /// <summary>
        /// 生成导航地图按钮点击事件，打开生成导航地图对话框
        /// </summary>
        private void OnGenerateNavigationMapButtonClick(object sender, RoutedEventArgs e)
        {
            try
            {
                LogManager.Info("生成导航地图按钮被点击，准备打开GenerateNavigationMapDialog窗口");

                // 检查前置条件
                if (ViewModel?.SelectedPathRoute == null || ViewModel.SelectedPathRoute.Points.Count == 0)
                {
                    LogManager.Warning("无法生成导航地图：未选择路径或路径为空");
                    return;
                }

                var dialog = new GenerateNavigationMapDialog();

                // 在Navisworks环境中，尝试找到合适的父窗口
                try
                {
                    // 尝试设置Owner为当前WPF窗口的顶级父窗口
                    var parentWindow = Window.GetWindow(this);
                    if (parentWindow != null)
                    {
                        dialog.Owner = parentWindow;
                        LogManager.Info("设置GenerateNavigationMapDialog的Owner为当前窗口");
                    }
                    else
                    {
                        LogManager.Info("未找到父窗口，将以独立窗口方式显示GenerateNavigationMapDialog");
                    }
                }
                catch (Exception ownerEx)
                {
                    LogManager.Warning($"设置Owner失败，将以独立窗口显示: {ownerEx.Message}");
                }

                if (dialog.ShowDialog() == true && dialog.IsConfirmed)
                {
                    LogManager.Info($"用户确认生成导航地图参数: 格式={dialog.ImageFormat}, 尺寸={dialog.ImageWidth}x{dialog.ImageHeight}, 样式={dialog.RenderStyle}");

                    // 调用ViewModel的业务逻辑方法生成图像
                    using (var bitmap = ViewModel.GenerateNavigationMap(
                        dialog.RenderStyle,
                        dialog.ImageWidth,
                        dialog.ImageHeight,
                        dialog.ImageFormat))
                    {
                        // 打开文件保存对话框
                        var saveFileDialog = new Microsoft.Win32.SaveFileDialog
                        {
                            Title = "保存导航地图",
                            Filter = GetImageFormatFilter(dialog.ImageFormat),
                            DefaultExt = GetDefaultExtension(dialog.ImageFormat),
                            FileName = $"导航地图_{DateTime.Now:yyyyMMdd_HHmmss}",
                            AddExtension = true
                        };

                        if (saveFileDialog.ShowDialog() == true)
                        {
                            // 保存图像
                            var generator = new NavisworksTransport.Core.NavigationMapGenerator();
                            generator.SaveNavigationMapImage(bitmap, saveFileDialog.FileName, dialog.ImageFormat);

                            LogManager.Info($"导航地图保存成功: {saveFileDialog.FileName}, 尺寸: {dialog.ImageWidth}x{dialog.ImageHeight}, 格式: {dialog.ImageFormat}");
                        }
                        else
                        {
                            LogManager.Info("用户取消了导航地图保存");
                        }
                    }
                }
                else
                {
                    LogManager.Info("用户取消了导航地图生成");
                }

                LogManager.Info("GenerateNavigationMapDialog窗口处理完成");
            }
            catch (Exception ex)
            {
                LogManager.Error($"生成导航地图失败: {ex.Message}");
                LogManager.Error($"异常详情: {ex}");
            }
        }

        /// <summary>
        /// 获取图像格式的文件过滤器
        /// </summary>
        private string GetImageFormatFilter(ImageFormat format)
        {
            if (format.Equals(ImageFormat.Jpeg))
            {
                return "JPEG图像 (*.jpg)|*.jpg|所有文件 (*.*)|*.*";
            }
            else if (format.Equals(ImageFormat.Png))
            {
                return "PNG图像 (*.png)|*.png|所有文件 (*.*)|*.*";
            }
            else if (format.Equals(ImageFormat.Bmp))
            {
                return "位图文件 (*.bmp)|*.bmp|所有文件 (*.*)|*.*";
            }
            return "图像文件 (*.png)|*.png|所有文件 (*.*)|*.*";
        }

        /// <summary>
        /// 获取图像格式的默认扩展名
        /// </summary>
        private string GetDefaultExtension(ImageFormat format)
        {
            if (format.Equals(ImageFormat.Jpeg)) return "jpg";
            if (format.Equals(ImageFormat.Png)) return "png";
            if (format.Equals(ImageFormat.Bmp)) return "bmp";
            return "png";
        }
    }
}
