using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Effects;

namespace AxCopilot.Views;

internal sealed class UserAskDialog : Window
{
	private string _selectedResponse = "";

	private readonly TextBox _customInput;

	private readonly StackPanel _optionPanel;

	public string SelectedResponse => _selectedResponse;

	private UserAskDialog(string question, List<string> options, string defaultValue)
	{
		//IL_0c8c: Unknown result type (might be due to invalid IL or missing references)
		UserAskDialog userAskDialog = this;
		base.Width = 460.0;
		base.MinWidth = 380.0;
		base.MaxWidth = 560.0;
		base.SizeToContent = SizeToContent.Height;
		base.WindowStartupLocation = WindowStartupLocation.CenterScreen;
		base.ResizeMode = ResizeMode.NoResize;
		base.WindowStyle = WindowStyle.None;
		base.AllowsTransparency = true;
		base.Background = Brushes.Transparent;
		base.Topmost = true;
		Brush background = (Application.Current.TryFindResource("LauncherBackground") as Brush) ?? new SolidColorBrush(Color.FromRgb(26, 27, 46));
		Brush brush = (Application.Current.TryFindResource("PrimaryText") as Brush) ?? Brushes.White;
		Brush brush2 = (Application.Current.TryFindResource("SecondaryText") as Brush) ?? Brushes.Gray;
		Brush accentBrush = (Application.Current.TryFindResource("AccentColor") as Brush) ?? new SolidColorBrush(Color.FromRgb(75, 94, 252));
		Brush brush3 = (Application.Current.TryFindResource("BorderColor") as Brush) ?? Brushes.Gray;
		Brush itemBg = (Application.Current.TryFindResource("ItemBackground") as Brush) ?? new SolidColorBrush(Color.FromRgb(42, 43, 64));
		Brush hoverBg = (Application.Current.TryFindResource("ItemHoverBackground") as Brush) ?? new SolidColorBrush(Color.FromArgb(24, byte.MaxValue, byte.MaxValue, byte.MaxValue));
		Border root = new Border
		{
			Background = background,
			CornerRadius = new CornerRadius(16.0),
			BorderBrush = brush3,
			BorderThickness = new Thickness(1.0),
			Padding = new Thickness(24.0, 20.0, 24.0, 18.0),
			Effect = new DropShadowEffect
			{
				BlurRadius = 24.0,
				ShadowDepth = 4.0,
				Opacity = 0.3,
				Color = Colors.Black
			}
		};
		StackPanel stackPanel = new StackPanel();
		Grid grid = new Grid
		{
			Margin = new Thickness(0.0, 0.0, 0.0, 12.0)
		};
		grid.MouseLeftButtonDown += delegate
		{
			try
			{
				userAskDialog.DragMove();
			}
			catch
			{
			}
		};
		StackPanel stackPanel2 = new StackPanel
		{
			Orientation = Orientation.Horizontal
		};
		stackPanel2.Children.Add(new TextBlock
		{
			Text = "\ue9ce",
			FontFamily = new FontFamily("Segoe MDL2 Assets"),
			FontSize = 16.0,
			Foreground = accentBrush,
			VerticalAlignment = VerticalAlignment.Center,
			Margin = new Thickness(0.0, 0.0, 8.0, 0.0)
		});
		stackPanel2.Children.Add(new TextBlock
		{
			Text = "AX Agent — 질문",
			FontSize = 14.0,
			FontWeight = FontWeights.SemiBold,
			Foreground = brush,
			VerticalAlignment = VerticalAlignment.Center
		});
		grid.Children.Add(stackPanel2);
		stackPanel.Children.Add(grid);
		stackPanel.Children.Add(new Border
		{
			Height = 1.0,
			Background = brush3,
			Opacity = 0.3,
			Margin = new Thickness(0.0, 0.0, 0.0, 14.0)
		});
		stackPanel.Children.Add(new TextBlock
		{
			Text = question,
			FontSize = 13.5,
			Foreground = brush,
			TextWrapping = TextWrapping.Wrap,
			Margin = new Thickness(0.0, 0.0, 0.0, 16.0),
			LineHeight = 20.0
		});
		_optionPanel = new StackPanel
		{
			Margin = new Thickness(0.0, 0.0, 0.0, 12.0)
		};
		Border selectedBorder = null;
		foreach (string option in options)
		{
			string capturedOption = option;
			Border border = new Border
			{
				Background = itemBg,
				CornerRadius = new CornerRadius(10.0),
				Padding = new Thickness(14.0, 10.0, 14.0, 10.0),
				Margin = new Thickness(0.0, 0.0, 0.0, 6.0),
				Cursor = Cursors.Hand,
				BorderBrush = Brushes.Transparent,
				BorderThickness = new Thickness(1.5)
			};
			StackPanel stackPanel3 = new StackPanel
			{
				Orientation = Orientation.Horizontal
			};
			Border element = new Border
			{
				Width = 18.0,
				Height = 18.0,
				CornerRadius = new CornerRadius(9.0),
				BorderBrush = brush2,
				BorderThickness = new Thickness(1.5),
				Margin = new Thickness(0.0, 0.0, 10.0, 0.0),
				VerticalAlignment = VerticalAlignment.Center,
				Child = new Border
				{
					Width = 10.0,
					Height = 10.0,
					CornerRadius = new CornerRadius(5.0),
					Background = Brushes.Transparent,
					HorizontalAlignment = HorizontalAlignment.Center,
					VerticalAlignment = VerticalAlignment.Center
				}
			};
			stackPanel3.Children.Add(element);
			stackPanel3.Children.Add(new TextBlock
			{
				Text = capturedOption,
				FontSize = 13.0,
				Foreground = brush,
				VerticalAlignment = VerticalAlignment.Center,
				TextWrapping = TextWrapping.Wrap
			});
			border.Child = stackPanel3;
			border.MouseEnter += delegate(object s, MouseEventArgs _)
			{
				Border border4 = (Border)s;
				if (border4.BorderBrush != accentBrush)
				{
					border4.Background = hoverBg;
				}
			};
			border.MouseLeave += delegate(object s, MouseEventArgs _)
			{
				Border border4 = (Border)s;
				if (border4.BorderBrush != accentBrush)
				{
					border4.Background = itemBg;
				}
			};
			border.MouseLeftButtonUp += delegate(object s, MouseButtonEventArgs _)
			{
				if (selectedBorder != null)
				{
					selectedBorder.BorderBrush = Brushes.Transparent;
					selectedBorder.Background = itemBg;
					Border border4 = FindRadioCircle(selectedBorder);
					if (border4 != null)
					{
						border4.Background = Brushes.Transparent;
					}
				}
				Border border5 = (Border)s;
				border5.BorderBrush = accentBrush;
				border5.Background = new SolidColorBrush(Color.FromArgb(21, ((SolidColorBrush)accentBrush).Color.R, ((SolidColorBrush)accentBrush).Color.G, ((SolidColorBrush)accentBrush).Color.B));
				Border border6 = FindRadioCircle(border5);
				if (border6 != null)
				{
					border6.Background = accentBrush;
				}
				selectedBorder = border5;
				userAskDialog._selectedResponse = capturedOption;
				if (userAskDialog._customInput != null)
				{
					userAskDialog._customInput.Text = "";
				}
			};
			_optionPanel.Children.Add(border);
		}
		stackPanel.Children.Add(_optionPanel);
		stackPanel.Children.Add(new TextBlock
		{
			Text = "또는 직접 입력:",
			FontSize = 11.5,
			Foreground = brush2,
			Margin = new Thickness(2.0, 0.0, 0.0, 6.0)
		});
		_customInput = new TextBox
		{
			MinHeight = 40.0,
			MaxHeight = 100.0,
			AcceptsReturn = true,
			TextWrapping = TextWrapping.Wrap,
			FontSize = 13.0,
			Background = itemBg,
			Foreground = brush,
			CaretBrush = brush,
			BorderBrush = brush3,
			BorderThickness = new Thickness(1.0),
			Padding = new Thickness(10.0, 8.0, 10.0, 8.0),
			Text = defaultValue
		};
		_customInput.TextChanged += delegate
		{
			if (!string.IsNullOrEmpty(userAskDialog._customInput.Text))
			{
				if (selectedBorder != null)
				{
					selectedBorder.BorderBrush = Brushes.Transparent;
					selectedBorder.Background = itemBg;
					Border border4 = FindRadioCircle(selectedBorder);
					if (border4 != null)
					{
						border4.Background = Brushes.Transparent;
					}
					selectedBorder = null;
				}
				userAskDialog._selectedResponse = userAskDialog._customInput.Text;
			}
		};
		stackPanel.Children.Add(_customInput);
		StackPanel stackPanel4 = new StackPanel
		{
			Orientation = Orientation.Horizontal,
			HorizontalAlignment = HorizontalAlignment.Right,
			Margin = new Thickness(0.0, 16.0, 0.0, 0.0)
		};
		Border border2 = new Border
		{
			Background = accentBrush,
			CornerRadius = new CornerRadius(10.0),
			Padding = new Thickness(20.0, 9.0, 20.0, 9.0),
			Cursor = Cursors.Hand,
			Margin = new Thickness(8.0, 0.0, 0.0, 0.0)
		};
		border2.Child = new TextBlock
		{
			Text = "확인",
			FontSize = 13.0,
			FontWeight = FontWeights.SemiBold,
			Foreground = Brushes.White
		};
		border2.MouseEnter += delegate(object s, MouseEventArgs _)
		{
			((Border)s).Opacity = 0.85;
		};
		border2.MouseLeave += delegate(object s, MouseEventArgs _)
		{
			((Border)s).Opacity = 1.0;
		};
		border2.MouseLeftButtonUp += delegate
		{
			if (string.IsNullOrWhiteSpace(userAskDialog._selectedResponse) && !string.IsNullOrWhiteSpace(defaultValue))
			{
				userAskDialog._selectedResponse = defaultValue;
			}
			userAskDialog.DialogResult = true;
			userAskDialog.Close();
		};
		stackPanel4.Children.Add(border2);
		Border border3 = new Border
		{
			Background = Brushes.Transparent,
			CornerRadius = new CornerRadius(10.0),
			Padding = new Thickness(16.0, 9.0, 16.0, 9.0),
			Cursor = Cursors.Hand,
			BorderBrush = new SolidColorBrush(Color.FromArgb(64, 220, 38, 38)),
			BorderThickness = new Thickness(1.0)
		};
		border3.Child = new TextBlock
		{
			Text = "취소",
			FontSize = 13.0,
			Foreground = new SolidColorBrush(Color.FromRgb(220, 38, 38))
		};
		border3.MouseEnter += delegate(object s, MouseEventArgs _)
		{
			((Border)s).Opacity = 0.85;
		};
		border3.MouseLeave += delegate(object s, MouseEventArgs _)
		{
			((Border)s).Opacity = 1.0;
		};
		border3.MouseLeftButtonUp += delegate
		{
			userAskDialog._selectedResponse = "";
			userAskDialog.DialogResult = false;
			userAskDialog.Close();
		};
		stackPanel4.Children.Insert(0, border3);
		stackPanel.Children.Add(stackPanel4);
		root.Child = stackPanel;
		base.Content = root;
		root.RenderTransformOrigin = new Point(0.5, 0.5);
		root.RenderTransform = new ScaleTransform(0.95, 0.95);
		root.Opacity = 0.0;
		base.Loaded += delegate
		{
			DoubleAnimation animation = new DoubleAnimation(0.0, 1.0, TimeSpan.FromMilliseconds(150.0));
			root.BeginAnimation(UIElement.OpacityProperty, animation);
			DoubleAnimation animation2 = new DoubleAnimation(0.95, 1.0, TimeSpan.FromMilliseconds(200.0))
			{
				EasingFunction = new QuadraticEase
				{
					EasingMode = EasingMode.EaseOut
				}
			};
			DoubleAnimation animation3 = new DoubleAnimation(0.95, 1.0, TimeSpan.FromMilliseconds(200.0))
			{
				EasingFunction = new QuadraticEase
				{
					EasingMode = EasingMode.EaseOut
				}
			};
			((ScaleTransform)root.RenderTransform).BeginAnimation(ScaleTransform.ScaleXProperty, animation2);
			((ScaleTransform)root.RenderTransform).BeginAnimation(ScaleTransform.ScaleYProperty, animation3);
		};
		base.KeyDown += delegate(object _, KeyEventArgs e)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Invalid comparison between Unknown and I4
			if ((int)e.Key == 13)
			{
				userAskDialog._selectedResponse = "";
				userAskDialog.DialogResult = false;
				userAskDialog.Close();
			}
			if ((int)e.Key == 6 && !userAskDialog._customInput.IsFocused)
			{
				userAskDialog.DialogResult = true;
				userAskDialog.Close();
			}
		};
	}

	private static Border? FindRadioCircle(Border optionBorder)
	{
		if (optionBorder.Child is StackPanel stackPanel && stackPanel.Children.Count > 0 && stackPanel.Children[0] is Border { Child: Border child })
		{
			return child;
		}
		return null;
	}

	public static string? Show(string question, List<string> options, string defaultValue = "")
	{
		UserAskDialog userAskDialog = new UserAskDialog(question, options, defaultValue);
		return (userAskDialog.ShowDialog() == true) ? userAskDialog.SelectedResponse : null;
	}
}
