using System.Windows;
namespace VideoDownloader.App;
/// UC-N18 크래시 리포트 대화상자 — 처리되지 않은 예외의 요약·스택을 보여주고 복사를 제공한다.
/// App 글로벌 예외 핸들러가 기록(crash.log) 후 사용자에게 표시한다.
public partial class CrashReportDialog : Window
{
/// 같은 예외 폭주로 다이얼로그가 연쇄 뜨는 것을 막는 재진입 가드.
public static bool IsOpen { get; private set; }
public CrashReportDialog(Exception ex)
{
InitializeComponent();
DetailBox.Text = $"{ex.GetType().Name}: {ex.Message}\r\n\r\n{ex.StackTrace}";
Closed += (_, _) => IsOpen = false;
}
/// 비모달 표시(재진입 가드). 이미 떠 있으면 무시한다.
public static void Show(Exception ex)
{
if (IsOpen) return;
IsOpen = true;
try { new CrashReportDialog(ex).Show(); }
catch { IsOpen = false; }
}
private void Copy_Click(object sender, RoutedEventArgs e)
{
try { Clipboard.SetText(DetailBox.Text); } catch { }
}
private void Close_Click(object sender, RoutedEventArgs e) => Close();
}