#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
集成知识库管理面板到 portal.html
将 knowledge.html 的功能作为内联面板集成，包含登录检测和历史记录
"""

import re

def integrate_knowledge_management_panel():
    with open('portal.html', 'r', encoding='utf-8') as f:
        content = f.read()
    
    # 1. 创建面板 HTML
    panel_html = '''
    <!-- ====== 知识库管理 PANEL ====== -->
    <div class="panel" id="panel-knowledge-management">
      <div class="card">
        <div class="card-header">🗂️ 知识库管理 <span style="font-weight:400;font-size:12px;color:var(--danger);margin-left:8px;">🔒 需登录</span></div>
        <div class="card-body">
          <div id="knowledge-management-login-required" class="login-required" style="display:none;">
            <div class="lock-icon">🔒</div>
            <div class="lock-msg">请先登录后使用知识库管理功能</div>
            <p style="font-size:13px;color:var(--text-secondary);">在左侧输入用户名和密码登录</p>
          </div>
          <div id="knowledge-management-content">
          <div class="form-grid">
            <div class="form-group">
              <label>分类</label>
              <select id="km-category">
                <option value="material">素材类（图片/视频）</option>
                <option value="case">案例类（优质案例）</option>
                <option value="knowledge">知识点（文案/流程）</option>
              </select>
            </div>
            <div class="form-group">
              <label>描述</label>
              <input type="text" id="km-desc" placeholder="可选，描述文件内容">
            </div>
            <div class="form-group full">
              <label>上传文件</label>
              <div class="upload-zone" id="km-upload-zone" style="border:2px dashed var(--border);border-radius:12px;padding:32px;text-align:center;cursor:pointer;transition:all 0.2s;">
                <div style="font-size:48px;margin-bottom:12px;">📎</div>
                <div style="color:var(--text-secondary);font-size:14px;">点击或拖拽文件到此处上传<br>支持图片、Word、Excel、PDF、PPT</div>
                <input type="file" id="km-file-input" multiple accept=".jpg,.jpeg,.png,.gif,.bmp,.mp4,.avi,.mov,.wmv,.doc,.docx,.xls,.xlsx,.pdf,.ppt,.pptx" style="display:none;">
              </div>
            </div>
            <div class="form-group full">
              <button class="btn btn-primary" id="km-upload-btn" onclick="handleKMUpload()">📤 上传文件</button>
            </div>
          </div>
          
          <div style="margin-top:24px;">
            <div style="font-size:16px;font-weight:600;margin-bottom:16px;">📋 文件列表</div>
            <div class="form-row" style="display:flex;gap:12px;margin-bottom:16px;">
              <select id="km-filter-category" onchange="loadKFiles()" style="padding:8px 12px;border:1px solid var(--border);border-radius:8px;">
                <option value="">全部分类</option>
                <option value="material">素材类</option>
                <option value="case">案例类</option>
                <option value="knowledge">知识点</option>
              </select>
              <input type="text" id="km-search-input" placeholder="搜索文件名..." oninput="loadKFiles()" style="flex:1;padding:8px 12px;border:1px solid var(--border);border-radius:8px;">
              <button class="btn btn-sm" onclick="loadKFiles()">🔍 搜索</button>
            </div>
            <div id="km-file-list" class="file-list" style="display:grid;grid-template-columns:repeat(auto-fill, minmax(280px, 1fr));gap:16px;">
              <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>
            </div>
          </div>
          </div>
        </div>
      </div>
    </div>
    '''
    
    # 2. 插入面板到 portal.html (在 panel-account-setup 之后，panel-users 之前)
    insert_before = '<!-- ====== USER MANAGEMENT PANEL (仅管理员) ====== -->'
    if insert_before in content:
        content = content.replace(insert_before, panel_html + '\n' + insert_before)
        print("✅ 面板 HTML 已插入")
    else:
        print("❌ 找不到插入位置")
        return
    
    # 3. 更新 PANEL_TYPE_MAP
    pattern = r"const PANEL_TYPE_MAP = \{([^}]+)\};"
    match = re.search(pattern, content, re.DOTALL)
    if match:
        old_map = match.group(1)
        if "'knowledge_management'" not in old_map:
            new_map = old_map.rstrip() + "\n  'knowledge_management': 'knowledge_management',\n"
            content = content.replace(old_map, new_map)
            print("✅ PANEL_TYPE_MAP 已更新")
    
    # 4. 更新 TYPE_NAMES
    pattern = r"const TYPE_NAMES = \{([^}]+)\};"
    match = re.search(pattern, content, re.DOTALL)
    if match:
        old_map = match.group(1)
        if "'knowledge_management'" not in old_map:
            new_map = old_map.rstrip() + "\n  'knowledge_management': '知识库管理',\n"
            content = content.replace(old_map, new_map)
            print("✅ TYPE_NAMES 已更新")
    
    # 5. 更新 switchPanel 中的 lockedPanels
    old_locked = "const lockedPanels = ['knowledge', 'copywriting', 'script', 'image', 'voice', 'content', 'digital-human', 'material_search', 'case_recommend', 'account_setup'];"
    new_locked = "const lockedPanels = ['knowledge', 'copywriting', 'script', 'image', 'voice', 'content', 'digital-human', 'material_search', 'case_recommend', 'account_setup', 'knowledge_management'];"
    if old_locked in content:
        content = content.replace(old_locked, new_locked)
        print("✅ lockedPanels 已更新")
    
    # 6. 更新 switchPanel 中的 listPanels
    old_list = "const listPanels = ['chat', 'knowledge', 'copywriting', 'script', 'image', 'voice', 'content', 'material_search', 'case_recommend', 'account_setup'];"
    new_list = "const listPanels = ['chat', 'knowledge', 'copywriting', 'script', 'image', 'voice', 'content', 'material_search', 'case_recommend', 'account_setup', 'knowledge_management'];"
    if old_list in content:
        content = content.replace(old_list, new_list)
        print("✅ listPanels 已更新")
    
    # 7. 更新侧边栏链接
    old_link = '<a href="knowledge.html" target="_blank">🗂️ 知识库管理</a>'
    new_link = '<a href="#knowledge-management" data-panel="knowledge-management">🗂️ 知识库管理</a>'
    if old_link in content:
        content = content.replace(old_link, new_link)
        print("✅ 侧边栏链接已更新")
    
    # 8. 添加 CSS 样式
    css_styles = '''
    <style>
    .upload-zone:hover, .upload-zone.dragover { border-color:var(--primary) !important; background:var(--primary-light) !important; }
    .file-list { display:grid;grid-template-columns:repeat(auto-fill, minmax(280px, 1fr));gap:16px; }
    .file-card { border:1px solid var(--border);border-radius:12px;padding:16px;background:#fff;transition:all 0.2s; }
    .file-card:hover { box-shadow:0 4px 12px rgb(0 0 0 / 0.1); }
    .file-icon { font-size:32px;margin-bottom:8px; }
    .file-name { font-size:14px;font-weight:500;margin-bottom:4px;word-break:break-all; }
    .file-meta { font-size:12px;color:var(--text-secondary); }
    .file-actions { display:flex;gap:8px;margin-top:12px; }
    </style>
    '''
    # 插入到 </head> 前
    if '</head>' in content and '<style>' not in content[content.find('</head>')-200:content.find('</head>')]:
        content = content.replace('</head>', css_styles + '\n</head>')
        print("✅ CSS 样式已添加")
    
    # 保存
    with open('portal.html', 'w', encoding='utf-8') as f:
        f.write(content)
    
    print("\n✅ 知识库管理面板集成完成！")
    print("⚠️  请手动添加 JS 函数：handleKMUpload(), loadKFiles(), renderKFiles(), deleteKFile()")

if __name__ == '__main__':
    integrate_knowledge_management_panel()
