using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Effects;

namespace AxCopilot.Views;

internal sealed class InputDialog : Window
{
	private readonly TextBox _textBox;

	public string ResponseText => _textBox.Text;

	public InputDialog(string title, string prompt, string defaultValue = "", string placeholder = "")
	{
		base.WindowStartupLocation = WindowStartupLocation.CenterOwner;
		base.ResizeMode = ResizeMode.NoResize;
		base.WindowStyle = WindowStyle.None;
		base.AllowsTransparency = true;
		base.Background = Brushes.Transparent;
		base.Width = 400.0;
		base.SizeToContent = SizeToContent.Height;
		Brush background = (Application.Current.TryFindResource("LauncherBackground") as Brush) ?? new SolidColorBrush(Color.FromRgb(26, 27, 46));
		Brush borderBrush = (Application.Current.TryFindResource("BorderColor") as Brush) ?? Brushes.Gray;
		Brush foreground = (Application.Current.TryFindResource("PrimaryText") as Brush) ?? Brushes.White;
		Brush foreground2 = (Application.Current.TryFindResource("SecondaryText") as Brush) ?? Brushes.Gray;
		Brush accentBrush = (Application.Current.TryFindResource("AccentColor") as Brush) ?? Brushes.CornflowerBlue;
		Brush background2 = (Application.Current.TryFindResource("ItemBackground") as Brush) ?? new SolidColorBrush(Color.FromRgb(42, 43, 62));
		Border border = new Border
		{
			Background = background,
			BorderBrush = borderBrush,
			BorderThickness = new Thickness(1.0),
			CornerRadius = new CornerRadius(14.0),
			Margin = new Thickness(16.0),
			Effect = new DropShadowEffect
			{
				BlurRadius = 24.0,
				ShadowDepth = 6.0,
				Opacity = 0.35,
				Color = Colors.Black,
				Direction = 270.0
			}
		};
		StackPanel stackPanel = new StackPanel
		{
			Margin = new Thickness(24.0, 20.0, 24.0, 20.0)
		};
		StackPanel stackPanel2 = new StackPanel
		{
			Orientation = Orientation.Horizontal,
			Margin = new Thickness(0.0, 0.0, 0.0, 16.0)
		};
		stackPanel2.Children.Add(new TextBlock
		{
			Text = "\ue8ac",
			FontFamily = new FontFamily("Segoe MDL2 Assets"),
			FontSize = 16.0,
			Foreground = accentBrush,
			VerticalAlignment = VerticalAlignment.Center,
			Margin = new Thickness(0.0, 0.0, 10.0, 0.0)
		});
		stackPanel2.Children.Add(new TextBlock
		{
			Text = title,
			FontSize = 15.0,
			FontWeight = FontWeights.SemiBold,
			Foreground = foreground,
			VerticalAlignment = VerticalAlignment.Center
		});
		stackPanel.Children.Add(stackPanel2);
		stackPanel.Children.Add(new TextBlock
		{
			Text = prompt,
			FontSize = 12.5,
			Foreground = foreground2,
			Margin = new Thickness(0.0, 0.0, 0.0, 8.0)
		});
		_textBox = new TextBox
		{
			Text = defaultValue,
			FontSize = 13.0,
			Padding = new Thickness(14.0, 8.0, 14.0, 8.0),
			Foreground = foreground,
			Background = Brushes.Transparent,
			CaretBrush = accentBrush,
			BorderThickness = new Thickness(0.0),
			BorderBrush = Brushes.Transparent
		};
		_textBox.KeyDown += delegate(object _, KeyEventArgs e)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Invalid comparison between Unknown and I4
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Invalid comparison between Unknown and I4
			if ((int)e.Key == 6)
			{
				base.DialogResult = true;
				Close();
			}
			if ((int)e.Key == 13)
			{
				base.DialogResult = false;
				Close();
			}
		};
		TextBlock placeholderBlock = new TextBlock
		{
			Text = placeholder,
			FontSize = 13.0,
			Foreground = foreground2,
			Opacity = 0.5,
			IsHitTestVisible = false,
			VerticalAlignment = VerticalAlignment.Center,
			Padding = new Thickness(14.0, 8.0, 14.0, 8.0),
			Visibility = ((!string.IsNullOrEmpty(defaultValue) || string.IsNullOrEmpty(placeholder)) ? Visibility.Collapsed : Visibility.Visible)
		};
		_textBox.TextChanged += delegate
		{
			placeholderBlock.Visibility = ((!string.IsNullOrEmpty(_textBox.Text)) ? Visibility.Collapsed : Visibility.Visible);
		};
		Grid child = new Grid
		{
			Children = 
			{
				(UIElement)_textBox,
				(UIElement)placeholderBlock
			}
		};
		Border inputBorder = new Border
		{
			CornerRadius = new CornerRadius(10.0),
			BorderBrush = borderBrush,
			BorderThickness = new Thickness(1.0),
			Background = background2,
			Child = child
		};
		_textBox.GotFocus += delegate
		{
			inputBorder.BorderBrush = accentBrush;
		};
		_textBox.LostFocus += delegate
		{
			inputBorder.BorderBrush = borderBrush;
		};
		stackPanel.Children.Add(inputBorder);
		StackPanel stackPanel3 = new StackPanel
		{
			Orientation = Orientation.Horizontal,
			HorizontalAlignment = HorizontalAlignment.Right,
			Margin = new Thickness(0.0, 18.0, 0.0, 0.0)
		};
		Button button = CreateButton("취소", Brushes.Transparent, foreground2, borderBrush);
		button.Click += delegate
		{
			base.DialogResult = false;
			Close();
		};
		stackPanel3.Children.Add(button);
		Button button2 = CreateButton("확인", accentBrush, Brushes.White, null);
		button2.Click += delegate
		{
			base.DialogResult = true;
			Close();
		};
		stackPanel3.Children.Add(button2);
		stackPanel.Children.Add(stackPanel3);
		border.Child = stackPanel;
		base.Content = border;
		stackPanel2.MouseLeftButtonDown += delegate(object _, MouseButtonEventArgs e)
		{
			if (e.ClickCount == 1)
			{
				DragMove();
			}
		};
		base.Loaded += delegate
		{
			_textBox.Focus();
			_textBox.SelectAll();
		};
	}

	private static Button CreateButton(string text, Brush background, Brush foreground, Brush? borderBrush)
	{
		Button button = new Button
		{
			Cursor = Cursors.Hand,
			Margin = new Thickness(0.0, 0.0, 0.0, 0.0)
		};
		if (text == "취소")
		{
			button.Margin = new Thickness(0.0, 0.0, 8.0, 0.0);
		}
		ControlTemplate controlTemplate = new ControlTemplate(typeof(Button));
		FrameworkElementFactory frameworkElementFactory = new FrameworkElementFactory(typeof(Border));
		frameworkElementFactory.SetValue(Border.BackgroundProperty, background);
		frameworkElementFactory.SetValue(Border.CornerRadiusProperty, new CornerRadius(8.0));
		frameworkElementFactory.SetValue(Border.PaddingProperty, new Thickness(20.0, 8.0, 20.0, 8.0));
		frameworkElementFactory.Name = "Bd";
		if (borderBrush != null)
		{
			frameworkElementFactory.SetValue(Border.BorderBrushProperty, borderBrush);
			frameworkElementFactory.SetValue(Border.BorderThicknessProperty, new Thickness(1.0));
		}
		FrameworkElementFactory frameworkElementFactory2 = new FrameworkElementFactory(typeof(ContentPresenter));
		frameworkElementFactory2.SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Center);
		frameworkElementFactory2.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Center);
		frameworkElementFactory.AppendChild(frameworkElementFactory2);
		controlTemplate.VisualTree = frameworkElementFactory;
		Trigger trigger = new Trigger
		{
			Property = UIElement.IsMouseOverProperty,
			Value = true
		};
		trigger.Setters.Add(new Setter(UIElement.OpacityProperty, 0.85));
		controlTemplate.Triggers.Add(trigger);
		button.Template = controlTemplate;
		button.Content = new TextBlock
		{
			Text = text,
			FontSize = 13.0,
			Foreground = foreground
		};
		return button;
	}
}
