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

namespace AxCopilot.Views;

internal sealed class PromptTemplateDialog : Window
{
	private readonly TextBox _nameBox;

	private readonly TextBox _contentBox;

	public string TemplateName => _nameBox.Text.Trim();

	public string TemplateContent => _contentBox.Text.Trim();

	public PromptTemplateDialog(string existingName = "", string existingContent = "")
	{
		bool flag = !string.IsNullOrEmpty(existingName);
		base.Title = (flag ? "템플릿 편집" : "템플릿 추가");
		base.Width = 480.0;
		base.SizeToContent = SizeToContent.Height;
		base.WindowStartupLocation = WindowStartupLocation.CenterOwner;
		base.ResizeMode = ResizeMode.NoResize;
		base.WindowStyle = WindowStyle.None;
		base.AllowsTransparency = true;
		base.Background = Brushes.Transparent;
		Brush background = (Application.Current.TryFindResource("LauncherBackground") as Brush) ?? new SolidColorBrush(Color.FromRgb(26, 27, 46));
		Brush foreground = (Application.Current.TryFindResource("PrimaryText") as Brush) ?? Brushes.White;
		Brush foreground2 = (Application.Current.TryFindResource("SecondaryText") as Brush) ?? Brushes.Gray;
		Brush brush = (Application.Current.TryFindResource("AccentColor") as Brush) ?? Brushes.Blue;
		Brush background2 = (Application.Current.TryFindResource("ItemBackground") as Brush) ?? new SolidColorBrush(Color.FromRgb(42, 43, 64));
		Brush brush2 = (Application.Current.TryFindResource("BorderColor") as Brush) ?? Brushes.Gray;
		Border border = new Border
		{
			Background = background,
			CornerRadius = new CornerRadius(16.0),
			BorderBrush = brush2,
			BorderThickness = new Thickness(1.0),
			Padding = new Thickness(28.0, 24.0, 28.0, 24.0),
			Effect = new DropShadowEffect
			{
				BlurRadius = 24.0,
				ShadowDepth = 4.0,
				Opacity = 0.3,
				Color = Colors.Black
			}
		};
		StackPanel stackPanel = new StackPanel();
		StackPanel stackPanel2 = new StackPanel
		{
			Orientation = Orientation.Horizontal,
			Margin = new Thickness(0.0, 0.0, 0.0, 20.0)
		};
		stackPanel2.Children.Add(new TextBlock
		{
			Text = "\ue8a5",
			FontFamily = new FontFamily("Segoe MDL2 Assets"),
			FontSize = 18.0,
			Foreground = brush,
			VerticalAlignment = VerticalAlignment.Center,
			Margin = new Thickness(0.0, 0.0, 10.0, 0.0)
		});
		stackPanel2.Children.Add(new TextBlock
		{
			Text = (flag ? "템플릿 편집" : "새 프롬프트 템플릿"),
			FontSize = 17.0,
			FontWeight = FontWeights.Bold,
			Foreground = foreground,
			VerticalAlignment = VerticalAlignment.Center
		});
		stackPanel.Children.Add(stackPanel2);
		stackPanel.Children.Add(new TextBlock
		{
			Text = "템플릿 이름",
			FontSize = 12.0,
			FontWeight = FontWeights.SemiBold,
			Foreground = foreground,
			Margin = new Thickness(0.0, 0.0, 0.0, 6.0)
		});
		stackPanel.Children.Add(new TextBlock
		{
			Text = "목록에 표시될 이름입니다. 예: 코드 리뷰 요청, 번역 요청",
			FontSize = 11.0,
			Foreground = foreground2,
			Margin = new Thickness(0.0, 0.0, 0.0, 8.0)
		});
		_nameBox = new TextBox
		{
			Text = existingName,
			FontSize = 13.0,
			Padding = new Thickness(12.0, 8.0, 12.0, 8.0),
			Foreground = foreground,
			Background = background2,
			CaretBrush = brush,
			BorderBrush = brush2,
			BorderThickness = new Thickness(1.0)
		};
		Border element = new Border
		{
			CornerRadius = new CornerRadius(8.0),
			ClipToBounds = true,
			Child = _nameBox
		};
		stackPanel.Children.Add(element);
		stackPanel.Children.Add(new Rectangle
		{
			Height = 1.0,
			Fill = brush2,
			Margin = new Thickness(0.0, 16.0, 0.0, 16.0),
			Opacity = 0.5
		});
		stackPanel.Children.Add(new TextBlock
		{
			Text = "프롬프트 내용",
			FontSize = 12.0,
			FontWeight = FontWeights.SemiBold,
			Foreground = foreground,
			Margin = new Thickness(0.0, 0.0, 0.0, 6.0)
		});
		stackPanel.Children.Add(new TextBlock
		{
			Text = "채팅 입력란에 자동으로 삽입될 텍스트입니다.",
			FontSize = 11.0,
			Foreground = foreground2,
			Margin = new Thickness(0.0, 0.0, 0.0, 8.0)
		});
		_contentBox = new TextBox
		{
			Text = existingContent,
			FontSize = 13.0,
			Padding = new Thickness(12.0, 8.0, 12.0, 8.0),
			Foreground = foreground,
			Background = background2,
			CaretBrush = brush,
			BorderBrush = brush2,
			BorderThickness = new Thickness(1.0),
			AcceptsReturn = true,
			TextWrapping = TextWrapping.Wrap,
			MinHeight = 100.0,
			MaxHeight = 240.0,
			VerticalScrollBarVisibility = ScrollBarVisibility.Auto
		};
		Border element2 = new Border
		{
			CornerRadius = new CornerRadius(8.0),
			ClipToBounds = true,
			Child = _contentBox
		};
		stackPanel.Children.Add(element2);
		TextBlock charCount = new TextBlock
		{
			FontSize = 10.5,
			Foreground = foreground2,
			Margin = new Thickness(0.0, 6.0, 0.0, 0.0),
			HorizontalAlignment = HorizontalAlignment.Right
		};
		UpdateCharCount(charCount);
		_contentBox.TextChanged += delegate
		{
			UpdateCharCount(charCount);
		};
		stackPanel.Children.Add(charCount);
		StackPanel stackPanel3 = new StackPanel
		{
			Orientation = Orientation.Horizontal,
			HorizontalAlignment = HorizontalAlignment.Right,
			Margin = new Thickness(0.0, 20.0, 0.0, 0.0)
		};
		Button button = new Button
		{
			Content = "취소",
			Width = 80.0,
			Padding = new Thickness(0.0, 8.0, 0.0, 8.0),
			Margin = new Thickness(0.0, 0.0, 10.0, 0.0),
			Background = Brushes.Transparent,
			Foreground = foreground2,
			BorderBrush = brush2,
			BorderThickness = new Thickness(1.0),
			Cursor = Cursors.Hand,
			FontSize = 13.0
		};
		button.Click += delegate
		{
			base.DialogResult = false;
			Close();
		};
		stackPanel3.Children.Add(button);
		Button button2 = new Button
		{
			Content = (flag ? "저장" : "추가"),
			Width = 80.0,
			Padding = new Thickness(0.0, 8.0, 0.0, 8.0),
			Background = brush,
			Foreground = Brushes.White,
			BorderThickness = new Thickness(0.0),
			Cursor = Cursors.Hand,
			FontSize = 13.0,
			FontWeight = FontWeights.SemiBold
		};
		button2.Click += delegate
		{
			if (string.IsNullOrWhiteSpace(_nameBox.Text))
			{
				CustomMessageBox.Show("템플릿 이름을 입력하세요.", "입력 오류", MessageBoxButton.OK, MessageBoxImage.Exclamation);
				_nameBox.Focus();
			}
			else if (string.IsNullOrWhiteSpace(_contentBox.Text))
			{
				CustomMessageBox.Show("프롬프트 내용을 입력하세요.", "입력 오류", MessageBoxButton.OK, MessageBoxImage.Exclamation);
				_contentBox.Focus();
			}
			else
			{
				base.DialogResult = true;
				Close();
			}
		};
		stackPanel3.Children.Add(button2);
		stackPanel.Children.Add(stackPanel3);
		border.Child = stackPanel;
		base.Content = border;
		base.KeyDown += delegate(object _, KeyEventArgs ke)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			if ((int)ke.Key == 13)
			{
				base.DialogResult = false;
				Close();
			}
		};
		base.Loaded += delegate
		{
			_nameBox.Focus();
			_nameBox.SelectAll();
		};
		border.MouseLeftButtonDown += delegate(object _, MouseButtonEventArgs me)
		{
			if (me.LeftButton == MouseButtonState.Pressed)
			{
				try
				{
					DragMove();
				}
				catch
				{
				}
			}
		};
	}

	private void UpdateCharCount(TextBlock tb)
	{
		int length = _contentBox.Text.Length;
		tb.Text = $"{length}자";
	}
}
