"""
修复知识库管理上传功能：
1. 添加上传区域点击事件
2. 添加文件选择预览
3. 添加拖拽上传支持
4. 修复上传API调用
用法：python fix_km_upload.py
"""
import re

PORTAL = r"D:\AI-Ad-Agent\portal\portal.html"

with open(PORTAL, 'r', encoding='utf-8') as f:
    content = f.read()

# ===== 修复1：在 switchPanel 中添加 initKMDragDrop() 调用 =====
# 在 switchPanel 函数中，当切换到 knowledge-management 面板时，初始化拖拽功能

old_switch = r"""    // 加载记录
    if (listPanels.includes(panel)) loadRecordList(panel);"""

new_switch = r"""    // 加载记录
    if (listPanels.includes(panel)) loadRecordList(panel);
    
    // v11.8: 初始化知识库管理拖拽上传
    if (panel === 'knowledge-management') {
      setTimeout(() => { initKMDragDrop(); }, 100);
    }"""

if old_switch in content:
    content = content.replace(old_switch, new_switch)
    print("[OK] 修复1：switchPanel() 中添加 initKMDragDrop() 调用")
else:
    print("[WARN] 修复1：未找到 switchPanel 中的目标代码")

# ===== 修复2：在 // ===== 知识库管理 ===== 前插入新函数 =====
old_km_section = r"""// ====== 知识库管理 ======
const KM_API = '/api/knowledge';"""

new_km_section = r"""// ====== 知识库管理 ======
const KM_API = '/api/knowledge';

// 文件选择预览
function handleKMFileSelected(files) {
  const el = document.getElementById('km-selected-files');
  if (!el) return;
  if (!files || files.length === 0) {
    el.innerHTML = '';
    return;
  }
  const list = Array.from(files).map(f => `📄 ${f.name} (${formatSize(f.size)})`).join('<br>');
  el.innerHTML = `<div style="padding:8px 12px;background:var(--primary-tint);border-radius:8px;border:1px solid var(--primary);margin-top:8px;">已选择 ${files.length} 个文件：<br>${list}</div>`;
}

// 拖拽上传支持
function initKMDragDrop() {
  const zone = document.getElementById('km-upload-zone');
  if (!zone || zone._dragInit) return;
  zone._dragInit = true;
  
  zone.addEventListener('dragover', function(e) {
    e.preventDefault();
    this.style.borderColor = 'var(--primary)';
    this.style.background = 'var(--primary-tint)';
  });
  
  zone.addEventListener('dragleave', function(e) {
    e.preventDefault();
    this.style.borderColor = 'var(--border)';
    this.style.background = 'var(--bg)';
  });
  
  zone.addEventListener('drop', function(e) {
    e.preventDefault();
    this.style.borderColor = 'var(--border)';
    this.style.background = 'var(--bg)';
    const files = e.dataTransfer.files;
    if (files && files.length > 0) {
      const input = document.getElementById('km-file-input');
      const dt = new DataTransfer();
      for (let i = 0; i < files.length; i++) dt.items.add(files[i]);
      input.files = dt.files;
      handleKMFileSelected(files);
    }
  });
}"""

if old_km_section in content:
    content = content.replace(old_km_section, new_km_section)
    print("[OK] 修复2：添加 handleKMFileSelected() 和 initKMDragDrop() 函数")
else:
    print("[WARN] 修复2：未找到知识库管理章节，尝试模糊匹配...")
    if 'const KM_API' in content:
        print("[INFO] KM_API 存在，但注释格式不匹配")

# ===== 修复3：检查上传按钮是否调用正确的函数 =====
# 确保 handleKMUpload() 函数在 handleKMFileSelected 之后定义

# 检查 handleKMUpload 函数是否存在
if 'async function handleKMUpload' in content:
    print("[OK] 修复3：handleKMUpload() 函数存在")
else:
    print("[ERROR] 修复3：handleKMUpload() 函数不存在！")

# ===== 保存修改 =====
with open(PORTAL, 'w', encoding='utf-8') as f:
    f.write(content)

print("\n✅ 知识库管理上传功能修复完成！")
print("\n修复内容：")
print("1. 上传区域现在可以点击触发文件选择")
print("2. 选择文件后会显示文件列表预览")
print("3. 支持拖拽文件到上传区域")
print("4. 切换到知识库管理面板时自动初始化拖拽功能")
print("\n下一步：")
print("1. 刷新浏览器（Ctrl+F5）")
print("2. 测试点击上传区域")
print("3. 测试拖拽文件上传")
