#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
添加知识库管理面板的 JS 函数到 portal.html
"""

def add_km_js_functions():
    with open('portal.html', 'r', encoding='utf-8') as f:
        content = f.read()
    
    # JS 函数
    js_functions = '''

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

// 上传文件
async function handleKMUpload() {
  if (!requireLogin()) return;
  const files = document.getElementById('km-file-input').files;
  if (!files || files.length === 0) { showToast('请选择文件'); return; }
  
  const category = document.getElementById('km-category').value;
  const desc = document.getElementById('km-desc').value;
  
  for (let i = 0; i < files.length; i++) {
    const fd = new FormData();
    fd.append('file', files[i]);
    fd.append('category', category);
    fd.append('description', desc);
    if (currentUser) fd.append('owner', currentUser);
    
    try {
      const resp = await fetch(`${KM_API}/upload`, { method: 'POST', body: fd });
      const data = await resp.json();
      if (!data.success) console.error('Upload failed:', data.error);
    } catch (e) { console.error('Upload error:', e); }
  }
  
  document.getElementById('km-file-input').value = '';
  document.getElementById('km-desc').value = '';
  showToast('上传完成');
  loadKFiles();
}

// 加载文件列表
async function loadKFiles() {
  if (!currentUser) return;
  const category = document.getElementById('km-filter-category').value;
  const search = document.getElementById('km-search-input').value;
  let url = `${KM_API}/list`;
  const params = new URLSearchParams();
  if (category) params.append('category', category);
  if (search) params.append('search', search);
  if (params.toString()) url += '?' + params.toString();
  
  try {
    const resp = await fetch(url, {
      headers: { 'Authorization': `Bearer ${authToken}` }
    });
    const data = await resp.json();
    renderKFiles(data.files || []);
  } catch (e) {
    document.getElementById('km-file-list').innerHTML = '<div class="empty"><div class="icon">⚠️</div>加载失败</div>';
  }
}

// 渲染文件列表
function renderKFiles(files) {
  const container = document.getElementById('km-file-list');
  if (!files.length) {
    container.innerHTML = '<div class="empty" style="text-align:center;padding:60px 20px;color:var(--text-secondary);grid-column:1/-1;"><div style="font-size:64px;margin-bottom:16px;">📂</div>暂无文件</div>';
    return;
  }
  
  const icons = { jpg:'🖼️', jpeg:'🖼️', png:'🖼️', gif:'🖼️', mp4:'🎬', avi:'🎬', doc:'📝', docx:'📝', xls:'📊', xlsx:'📊', pdf:'📕', ppt:'📑', pptx:'📑', default:'📄' };
  container.innerHTML = files.map(f => {
    const ext = (f.filename || '').split('.').pop().toLowerCase();
    const icon = icons[ext] || icons.default;
    const date = f.upload_time ? new Date(f.upload_time).toLocaleDateString('zh-CN') : '';
    const isOwner = currentUser && f.owner === currentUser;
    return `<div class="file-card">
      <div class="file-icon">${icon}</div>
      <div class="file-name">${f.filename || 'unknown'}</div>
      <div class="file-meta">${f.filetype || ''} · ${formatSize(f.filesize)} · ${date}</div>
      <div style="margin-top:6px;"><span class="tag">${(f.category||'misc')}</span></div>
      ${f.metadata ? `<div style="font-size:12px;color:#64748b;margin-top:8px;">${f.metadata}</div>` : ''}
      <div class="file-actions">
        ${isOwner ? `<button class="btn btn-sm btn-danger" onclick="deleteKFile(${f.id}, '${f.filename}')">🗑️ 删除</button>` : ''}
      </div>
    </div>`;
  }).join('');
}

// 删除文件
async function deleteKFile(id, name) {
  if (!confirm(`确定删除「${name}」？`)) return;
  try {
    const resp = await fetch(`${KM_API}/delete?id=${id}`, { 
      method: 'DELETE',
      headers: { 'Authorization': `Bearer ${authToken}` }
    });
    const data = await resp.json();
    if (data.success) { loadKFiles(); showToast('删除成功'); }
    else showToast('删除失败: ' + (data.error || '未知错误'), 'error');
  } catch (e) { showToast('删除失败: ' + e.message, 'error'); }
}

// 格式化文件大小
function formatSize(bytes) {
  if (!bytes) return '0 B';
  if (bytes < 1024) return bytes + ' B';
  if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';
  return (bytes / 1024 / 1024).toFixed(1) + ' MB';
}
'''
    
    # 插入到 </script> 前
    if '</script>' in content:
        content = content.replace('</script>', js_functions + '\n</script>')
        print("✅ JS 函数已添加")
    else:
        print("❌ 找不到 </script> 标签")
        return
    
    # 保存
    with open('portal.html', 'w', encoding='utf-8') as f:
        f.write(content)
    
    print("\n✅ 知识库管理 JS 函数添加完成！")
    print("⚠️  需要更新后端 API 支持 owner 字段")

if __name__ == '__main__':
    add_km_js_functions()
