using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using AxCopilot.Services;

namespace AxCopilot.Views;

public partial class ChatWindow
{
    // ─── 대화 제목 인라인 편집 ────────────────────────────────────────────

    private void EnterTitleEditMode(TextBlock titleTb, string conversationId, Brush titleColor)
    {
        try
        {
            // titleTb가 이미 부모에서 분리된 경우(편집 중) 무시
            var parent = titleTb.Parent as StackPanel;
            if (parent == null) return;

            var idx = parent.Children.IndexOf(titleTb);
            if (idx < 0) return;

            var editBox = new TextBox
            {
                Text = titleTb.Text,
                FontSize = 12.5,
                Foreground = titleColor,
                Background = Brushes.Transparent,
                BorderBrush = ThemeResourceHelper.Accent(this),
                BorderThickness = new Thickness(0, 0, 0, 1),
                CaretBrush = titleColor,
                Padding = new Thickness(0),
                Margin = new Thickness(0),
            };

            // 안전하게 자식 교체: 먼저 제거 후 삽입
            parent.Children.RemoveAt(idx);
            parent.Children.Insert(idx, editBox);

            var committed = false;
            void CommitEdit()
            {
                if (committed) return;
                committed = true;

                var newTitle = editBox.Text.Trim();
                if (string.IsNullOrEmpty(newTitle)) newTitle = titleTb.Text;

                titleTb.Text = newTitle;
                // editBox가 아직 parent에 있는지 확인 후 교체
                try
                {
                    var currentIdx = parent.Children.IndexOf(editBox);
                    if (currentIdx >= 0)
                    {
                        parent.Children.RemoveAt(currentIdx);
                        parent.Children.Insert(currentIdx, titleTb);
                    }
                }
                catch (Exception) { /* 부모가 이미 해제된 경우 무시 */ }

                var conv = _storage.Load(conversationId);
                if (conv != null)
                {
                    conv.Title = newTitle;
                    _storage.Save(conv);
                    lock (_convLock)
                    {
                        if (_currentConversation?.Id == conversationId)
                            _currentConversation.Title = newTitle;
                    }
                    UpdateChatTitle();
                }
            }

            void CancelEdit()
            {
                if (committed) return;
                committed = true;
                try
                {
                    var currentIdx = parent.Children.IndexOf(editBox);
                    if (currentIdx >= 0)
                    {
                        parent.Children.RemoveAt(currentIdx);
                        parent.Children.Insert(currentIdx, titleTb);
                    }
                }
                catch (Exception) { /* 부모가 이미 해제된 경우 무시 */ }
            }

            editBox.KeyDown += (_, ke) =>
            {
                if (ke.Key == Key.Enter) { ke.Handled = true; CommitEdit(); }
                if (ke.Key == Key.Escape) { ke.Handled = true; CancelEdit(); }
            };
            editBox.LostFocus += (_, _) => CommitEdit();

            editBox.Focus();
            editBox.SelectAll();
        }
        catch (Exception ex)
        {
            LogService.Error($"제목 편집 오류: {ex.Message}");
        }
    }
}
