// ============================================================
//  DEVELOPER DOCUMENTATION PAGE
// ============================================================
window.DocsPage = function() {
  const [activeSection, setActiveSection] = React.useState('architecture');

  const sections = [
    { id:'architecture', icon:'fa-sitemap',        label:'Kiến trúc hệ thống' },
    { id:'tech',         icon:'fa-code',           label:'Tech Stack' },
    { id:'datamodel',    icon:'fa-database',       label:'Data Models' },
    { id:'api',          icon:'fa-plug',           label:'API Reference' },
    { id:'uiflows',      icon:'fa-project-diagram',label:'UI Flows' },
    { id:'files',        icon:'fa-folder-open',    label:'Cấu trúc file' },
    { id:'roles',        icon:'fa-user-shield',    label:'Phân quyền' },
    { id:'integration',  icon:'fa-link',           label:'Integration Points' },
    { id:'extend',       icon:'fa-puzzle-piece',   label:'Mở rộng hệ thống' },
  ];

  const Code = ({ children, lang='javascript' }) => (
    <pre style={{background:'#0f172a',color:'#94a3b8',borderRadius:9,padding:'14px 16px',fontSize:'.79rem',overflowX:'auto',lineHeight:1.7,margin:'10px 0'}}>
      <code style={{fontFamily:'monospace'}}>{children}</code>
    </pre>
  );

  const H2 = ({ icon, children }) => (
    <h2 style={{fontSize:'1.05rem',fontWeight:800,color:'var(--t1)',marginBottom:16,paddingBottom:10,borderBottom:'2px solid var(--border)',display:'flex',alignItems:'center',gap:9}}>
      <i className={`fas ${icon}`} style={{color:'var(--primary)'}}/>{children}
    </h2>
  );
  const H3 = ({ children }) => (
    <h3 style={{fontSize:'.9rem',fontWeight:700,color:'var(--t1)',margin:'20px 0 10px',display:'flex',alignItems:'center',gap:7}}>
      <span style={{width:4,height:16,background:'var(--primary)',borderRadius:2,display:'inline-block'}}/>{children}
    </h3>
  );
  const P = ({ children }) => <p style={{fontSize:'.85rem',color:'var(--t2)',lineHeight:1.75,marginBottom:12}}>{children}</p>;
  const Li = ({ children }) => <li style={{fontSize:'.84rem',color:'var(--t2)',lineHeight:1.9}}>{children}</li>;

  const TableRow = ({ cols }) => (
    <tr>{cols.map((c,i)=><td key={i} style={{padding:'8px 12px',fontSize:'.82rem',borderBottom:'1px solid var(--border)',fontFamily:i===0?'monospace':'inherit',color:i===0?'var(--primary)':'var(--t2)'}}>{c}</td>)}</tr>
  );
  const Table = ({ headers, rows }) => (
    <div className="tbl-wrap" style={{marginTop:10,marginBottom:16}}>
      <table>
        <thead><tr>{headers.map(h=><th key={h} style={{fontSize:'.78rem',padding:'8px 12px'}}>{h}</th>)}</tr></thead>
        <tbody>{rows.map((r,i)=><TableRow key={i} cols={r}/>)}</tbody>
      </table>
    </div>
  );

  const renderSection = () => {
    switch(activeSection) {
      case 'architecture': return (
        <div>
          <H2 icon="fa-sitemap">Kiến trúc hệ thống</H2>
          <P>SEO SOP System là một <strong>Single-Page Application (SPA)</strong> thuần frontend, không cần backend server. Toàn bộ logic được xử lý trên trình duyệt (client-side), dữ liệu được lưu trữ qua <strong>RESTful Table API</strong> của nền tảng.</P>

          <H3>Sơ đồ kiến trúc</H3>
          <div style={{background:'var(--bg)',borderRadius:10,padding:'20px',border:'1px solid var(--border)',fontFamily:'monospace',fontSize:'.79rem',lineHeight:2,color:'var(--t2)'}}>
            <div style={{textAlign:'center',marginBottom:8}}>
              <span style={{padding:'6px 14px',background:'var(--primary)',color:'#fff',borderRadius:8,fontSize:'.8rem',fontWeight:700}}>Browser (Client)</span>
            </div>
            <div style={{textAlign:'center',color:'var(--t3)'}}>│</div>
            <div style={{display:'flex',justifyContent:'center',gap:20,margin:'4px 0'}}>
              {['React 18 (Babel CDN)','CSS Variables','Font Awesome'].map(t=>(
                <span key={t} style={{padding:'4px 10px',background:'rgba(79,70,229,.1)',color:'var(--primary)',borderRadius:6,fontSize:'.76rem',fontWeight:600}}>{t}</span>
              ))}
            </div>
            <div style={{textAlign:'center',color:'var(--t3)',margin:'4px 0'}}>│</div>
            <div style={{display:'flex',justifyContent:'center',gap:8,flexWrap:'wrap',margin:'4px 0'}}>
              {['js/App.jsx','js/store.js','js/api.js','js/sop-data.js'].map(t=>(
                <span key={t} style={{padding:'3px 9px',background:'rgba(6,182,212,.1)',color:'var(--cyan)',borderRadius:6,fontSize:'.76rem'}}>{t}</span>
              ))}
            </div>
            <div style={{textAlign:'center',color:'var(--t3)',margin:'4px 0'}}>│</div>
            <div style={{display:'flex',justifyContent:'center',gap:8,flexWrap:'wrap'}}>
              {['Login','Dashboard','Domains','DomainDetail','Keywords','Users','Progress','Logs','Guide','Docs'].map(t=>(
                <span key={t} style={{padding:'3px 8px',background:'rgba(16,185,129,.1)',color:'var(--green)',borderRadius:6,fontSize:'.73rem'}}>{t}.jsx</span>
              ))}
            </div>
            <div style={{textAlign:'center',color:'var(--t3)',margin:'4px 0'}}>│ (fetch)</div>
            <div style={{textAlign:'center'}}>
              <span style={{padding:'6px 14px',background:'rgba(245,158,11,.15)',color:'var(--yellow)',borderRadius:8,fontSize:'.8rem',fontWeight:700}}>RESTful Table API (tables/)</span>
            </div>
            <div style={{textAlign:'center',color:'var(--t3)',margin:'4px 0'}}>│</div>
            <div style={{display:'flex',justifyContent:'center',gap:10}}>
              {['users','domains','checklist_items','keywords','comments','activity_logs'].map(t=>(
                <span key={t} style={{padding:'4px 10px',background:'rgba(100,116,139,.1)',color:'var(--t2)',borderRadius:6,fontSize:'.74rem'}}>{t}</span>
              ))}
            </div>
          </div>

          <H3>Nguyên tắc thiết kế</H3>
          <ul style={{paddingLeft:20}}>
            <Li><strong>No Build Step</strong> — Toàn bộ code chạy trực tiếp qua Babel Standalone trên trình duyệt, không cần webpack/vite.</Li>
            <Li><strong>Global Namespace</strong> — Mỗi component/page được export ra <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>window.*</code> vì các file được load theo thứ tự trong HTML.</Li>
            <Li><strong>Simple State</strong> — Dùng <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>window.Store</code> (pub/sub đơn giản) thay vì Redux/Zustand để tránh dependency phức tạp.</Li>
            <Li><strong>REST-only</strong> — Mọi CRUD đều qua Table API, không có local storage hay IndexedDB.</Li>
          </ul>
        </div>
      );

      case 'tech': return (
        <div>
          <H2 icon="fa-code">Tech Stack</H2>
          <Table
            headers={['Công nghệ','Phiên bản','Mục đích']}
            rows={[
              ['React','18.x (CDN)','UI framework — components, hooks, state'],
              ['Babel Standalone','7.x (CDN)','Transpile JSX → JS trực tiếp trên browser'],
              ['Font Awesome','6.5.0 (CDN)','Icon library'],
              ['Google Fonts','Inter','Typography'],
              ['CSS Variables','Native','Design tokens, theming'],
              ['Fetch API','Native','HTTP requests đến Table API'],
            ]}
          />
          <H3>Tại sao không dùng bundler?</H3>
          <P>Hệ thống được thiết kế như một static site đơn giản, chạy được trực tiếp mà không cần build step. Babel CDN cho phép viết JSX và ES2022 mà không cần cài đặt node_modules. Điều này giúp:</P>
          <ul style={{paddingLeft:20,marginBottom:12}}>
            <Li>Deploy đơn giản — chỉ cần upload HTML/JS/CSS files</Li>
            <Li>Không có vấn đề dependency conflicts</Li>
            <Li>Dễ bảo trì và debug</Li>
          </ul>
          <H3>Lưu ý về performance</H3>
          <P>Babel CDN transpile JSX ở runtime, nên lần tải đầu sẽ chậm hơn (~1-2s). Để production tốt hơn, có thể pre-compile JSX bằng Babel CLI và thay <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>type="text/babel"</code> bằng <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>type="text/javascript"</code>.</P>
        </div>
      );

      case 'datamodel': return (
        <div>
          <H2 icon="fa-database">Data Models</H2>
          <P>Hệ thống sử dụng 6 bảng dữ liệu chính. Tất cả đều có field <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>id</code> (UUID) và các system fields tự động (<code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>created_at</code>, <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>updated_at</code>).</P>

          <H3>📋 users</H3>
          <Table headers={['Field','Type','Mô tả']} rows={[
            ['id','text (UUID)','Khóa chính'],
            ['username','text','Tên đăng nhập (unique)'],
            ['password','text','Mật khẩu (plain text — không hash)'],
            ['full_name','text','Họ tên hiển thị'],
            ['email','text','Email liên hệ'],
            ['role','text','admin | member'],
            ['status','text','active | inactive'],
            ['avatar','text','Chữ viết tắt avatar (tự gen)'],
            ['last_login','number','Timestamp đăng nhập cuối (ms)'],
          ]}/>

          <H3>🌐 domains</H3>
          <Table headers={['Field','Type','Mô tả']} rows={[
            ['id','text (UUID)','Khóa chính'],
            ['domain_name','text','Tên domain (VD: go88.vn)'],
            ['site_type','text','money_site|brand_site|microsite|satellite|blog|pbn|entity_site'],
            ['market','text','Thị trường target (VD: Việt Nam)'],
            ['language','text','Ngôn ngữ triển khai'],
            ['hosting','text','Thông tin hosting/server'],
            ['wordpress_theme','text','Tên theme WordPress'],
            ['target_keywords','text','Keywords mục tiêu chính'],
            ['status','text','planning|active|paused|completed'],
            ['assigned_to','text','User ID người phụ trách'],
            ['assigned_name','text','Tên người phụ trách (denormalized)'],
            ['overall_progress','number','% tiến độ tổng (0-100)'],
            ['current_phase','number','Giai đoạn hiện tại (0-13)'],
            ['notes','text','Ghi chú thêm'],
          ]}/>

          <H3>✅ checklist_items</H3>
          <Table headers={['Field','Type','Mô tả']} rows={[
            ['id','text (UUID)','Khóa chính'],
            ['domain_id','text','FK → domains.id'],
            ['phase','number','Phase ID (0-13)'],
            ['phase_name','text','Tên phase (denormalized)'],
            ['item_key','text','Key duy nhất (VD: p2_01) từ sop-data.js'],
            ['item_label','text','Nội dung checklist item'],
            ['item_value','text','Giá trị nhập liệu (nếu hasInput)'],
            ['status','text','pending|done|in_progress|na'],
            ['checked_by','text','User ID người tick'],
            ['checked_at','number','Timestamp tick (ms)'],
          ]}/>

          <H3>🔑 keywords</H3>
          <Table headers={['Field','Type','Mô tả']} rows={[
            ['id','text (UUID)','Khóa chính'],
            ['domain_id','text','FK → domains.id'],
            ['keyword','text','Từ khoá'],
            ['intent','text','brand|commercial|informational|navigational|semantic'],
            ['priority','text','core|support|traffic|semantic|brand'],
            ['target_url','text','URL target page'],
            ['page_type','text','Loại page (money_page/support_page...)'],
            ['current_rank','number','Rank hiện tại (0 = chưa rank)'],
            ['best_rank','number','Rank tốt nhất từ trước đến nay'],
            ['gsc_impression','number','Số impressions từ GSC'],
            ['gsc_click','number','Số clicks từ GSC'],
            ['anchor_main','text','Anchor text chính'],
            ['status','text','active|pending|achieved'],
            ['notes','text','Ghi chú tín hiệu ranking'],
          ]}/>

          <H3>💬 comments</H3>
          <Table headers={['Field','Type','Mô tả']} rows={[
            ['id','text (UUID)','Khóa chính'],
            ['domain_id','text','FK → domains.id'],
            ['phase','number','Phase ID liên quan'],
            ['item_key','text','Item key liên quan (optional)'],
            ['author_id','text','FK → users.id'],
            ['author_name','text','Tên tác giả (denormalized)'],
            ['author_role','text','admin|member'],
            ['content','rich_text','Nội dung comment'],
            ['type','text','note|correction|warning|approval'],
          ]}/>

          <H3>📝 activity_logs</H3>
          <Table headers={['Field','Type','Mô tả']} rows={[
            ['id','text (UUID)','Khóa chính'],
            ['user_id','text','FK → users.id'],
            ['user_name','text','Tên user (denormalized)'],
            ['user_role','text','Vai trò user'],
            ['action','text','Loại hành động (create_domain, update_checklist...)'],
            ['details','text','Mô tả chi tiết hành động'],
            ['domain_id','text','Domain liên quan (optional)'],
            ['domain_name','text','Tên domain (denormalized)'],
            ['phase','number','Phase liên quan (-1 = không có)'],
            ['item_key','text','Item key liên quan (optional)'],
          ]}/>
        </div>
      );

      case 'api': return (
        <div>
          <H2 icon="fa-plug">API Reference</H2>
          <P>Toàn bộ tương tác với dữ liệu đi qua <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>window.API</code> (js/api.js) — wrapper xung quanh Fetch API.</P>

          <H3>Endpoints</H3>
          <Table headers={['Method','Endpoint','Mô tả']} rows={[
            ['GET','tables/{table}?page&limit&search','Lấy danh sách với pagination'],
            ['GET','tables/{table}/{id}','Lấy 1 record theo ID'],
            ['POST','tables/{table}','Tạo record mới (HTTP 201)'],
            ['PUT','tables/{table}/{id}','Cập nhật toàn bộ record'],
            ['PATCH','tables/{table}/{id}','Cập nhật một phần record'],
            ['DELETE','tables/{table}/{id}','Xoá record (soft delete)'],
          ]}/>

          <H3>window.API methods</H3>
          <Code>{`// Lấy danh sách (có phân trang và filter)
await API.get('domains', { limit: 100, page: 1 });
// Returns: { data: [], total, page, limit, table, schema }

// Lấy 1 record
await API.getOne('domains', domainId);
// Returns: record object

// Tạo record mới
await API.post('domains', { id: uuid(), ...data });
// Returns: created record

// Cập nhật một phần
await API.patch('checklist_items', itemId, { status: 'done' });
// Returns: updated record

// Xoá
await API.del('keywords', keywordId);
// Returns: void (204)`}</Code>

          <H3>System Fields (tự động tạo)</H3>
          <Table headers={['Field','Mô tả']} rows={[
            ['id','UUID khóa chính (phải truyền vào khi POST)'],
            ['gs_project_id','Project ID của nền tảng'],
            ['gs_table_name','Tên bảng'],
            ['created_at','Timestamp tạo (milliseconds)'],
            ['updated_at','Timestamp cập nhật (milliseconds)'],
          ]}/>

          <H3>Utility functions (window.*)</H3>
          <Code>{`uuid()           // Tạo UUID v4
toast(msg, type, duration) // type: 'success'|'error'|'warning'|'info'
formatDate(ts)   // Timestamp → 'DD/MM/YYYY HH:mm'
formatDateShort(ts) // Timestamp → 'DD/MM/YYYY'
logAction(action, details, domainId, domainName, phase, itemKey)
computeProgress(checklistItems) // → { overall: 0-100, byPhase: {} }
getPhaseItemKeys(phaseId)  // → ['p1_01', 'p1_02', ...]
domainStatusBadge(status)  // → { cls, label }
siteTypeBadge(type)        // → { cls, label }`}</Code>
        </div>
      );

      case 'uiflows': return (
        <div>
          <H2 icon="fa-project-diagram">UI Flows</H2>

          <H3>🔑 Authentication Flow</H3>
          <div style={{background:'var(--bg)',borderRadius:9,padding:'14px 16px',marginBottom:16,fontFamily:'monospace',fontSize:'.8rem',lineHeight:2,color:'var(--t2)'}}>
            <div>User nhập username/password</div>
            <div>→ API.get('users', {`{limit:100}`})</div>
            <div>→ Tìm user khớp username + password + status=active</div>
            <div>→ API.patch('users', id, {`{last_login: Date.now()}`})</div>
            <div>→ Store.set('currentUser', user)</div>
            <div>→ logAction('login', ...)</div>
            <div>→ Render App shell (Sidebar + Topbar + Page)</div>
          </div>

          <H3>🌐 Domain Onboarding Flow</H3>
          <div style={{background:'var(--bg)',borderRadius:9,padding:'14px 16px',marginBottom:16,fontFamily:'monospace',fontSize:'.8rem',lineHeight:2,color:'var(--t2)'}}>
            <div>Admin/Member mở trang Domains</div>
            <div>→ Nhấn "+ Thêm Domain" → mở DomainFormModal</div>
            <div>→ Điền info + assign member</div>
            <div>→ API.post('domains', {`{id, ...form, overall_progress:0, current_phase:0}`})</div>
            <div>→ logAction('create_domain', ...)</div>
            <div>→ Card domain xuất hiện trong danh sách</div>
            <div>→ Member nhấn "Checklist" → DomainDetailPage</div>
            <div>→ Chọn Phase → tick items → updateItem()</div>
            <div>→ API.post/patch('checklist_items', ...) + API.patch('domains', {`{overall_progress}`})</div>
          </div>

          <H3>✅ Checklist Update Flow</H3>
          <div style={{background:'var(--bg)',borderRadius:9,padding:'14px 16px',marginBottom:16,fontFamily:'monospace',fontSize:'.8rem',lineHeight:2,color:'var(--t2)'}}>
            <div>User click checkbox hoặc chọn status từ menu ⋮</div>
            <div>→ updateItem(key, status, value?)</div>
            <div>→ Tìm existing checklist_item theo domain_id + item_key</div>
            <div>→ Nếu có: API.patch | Nếu không: API.post</div>
            <div>→ Tính lại overallProgress() từ toàn bộ checkItems</div>
            <div>→ API.patch('domains', domainId, {`{overall_progress, current_phase}`})</div>
            <div>→ logAction('update_checklist', ...)</div>
            <div>→ Re-render CheckItem + phase progress bar</div>
          </div>

          <H3>💬 Comment Flow</H3>
          <div style={{background:'var(--bg)',borderRadius:9,padding:'14px 16px',marginBottom:16,fontFamily:'monospace',fontSize:'.8rem',lineHeight:2,color:'var(--t2)'}}>
            <div>User chọn type + nhập text + nhấn Gửi</div>
            <div>→ API.post('comments', {`{id, domain_id, phase, author_id, content, type}`})</div>
            <div>→ setComments(prev =&gt; [...prev, newComment])</div>
            <div>→ logAction('add_comment', ...)</div>
            <div>→ Comment xuất hiện trong danh sách phase + tab Comments</div>
          </div>

          <H3>📊 Admin Progress View Flow</H3>
          <div style={{background:'var(--bg)',borderRadius:9,padding:'14px 16px',fontFamily:'monospace',fontSize:'.8rem',lineHeight:2,color:'var(--t2)'}}>
            <div>Admin vào trang Tiến độ Team</div>
            <div>→ Load tất cả domains + users + checklist_items</div>
            <div>→ Tính avgProgress cho từng member từ domains</div>
            <div>→ Tính phaseProgress cho từng domain × phase</div>
            <div>→ Render member cards + detail table</div>
            <div>→ Click member card → filter domain theo assigned_to</div>
            <div>→ Click 👁 → Store.set('currentDomainId') + navigate('domain-detail')</div>
          </div>
        </div>
      );

      case 'files': return (
        <div>
          <H2 icon="fa-folder-open">Cấu trúc file</H2>
          <Code>{`/
├── index.html              # Entry point — load CDN + scripts theo thứ tự
├── css/
│   └── app.css             # Toàn bộ styles (CSS Variables + components)
├── js/
│   ├── sop-data.js         # SOP_PHASES data + getPhaseItemKeys()
│   ├── api.js              # window.API — fetch wrapper
│   ├── store.js            # window.Store, uuid, toast, formatDate, logAction
│   ├── App.jsx             # Root component — auth, routing, seed
│   ├── components/
│   │   ├── ui.jsx          # Modal, Badge, ProgressBar, Spinner, Tabs...
│   │   └── layout.jsx      # Sidebar, Topbar
│   └── pages/
│       ├── Login.jsx       # Trang đăng nhập
│       ├── Dashboard.jsx   # Dashboard (stats, recent domains, logs)
│       ├── Domains.jsx     # Danh sách domain + form tạo/sửa
│       ├── DomainDetail.jsx# Checklist SOP + Comments + Domain info
│       ├── Keywords.jsx    # Keyword tracking table
│       ├── Users.jsx       # Quản lý user (admin only)
│       ├── Progress.jsx    # Tiến độ team (admin only)
│       ├── Logs.jsx        # Activity logs (admin only)
│       ├── Guide.jsx       # User guide
│       └── Docs.jsx        # Developer documentation (trang này)
└── README.md`}</Code>

          <H3>Thứ tự load script (quan trọng)</H3>
          <P>Các file phải được load theo đúng thứ tự trong <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>index.html</code> vì không có module system:</P>
          <Code>{`<!-- 1. Data & utilities (không phụ thuộc nhau) -->
<script type="text/babel" src="js/sop-data.js" .../>
<script type="text/babel" src="js/api.js" .../>
<script type="text/babel" src="js/store.js" .../>

<!-- 2. Shared UI components -->
<script type="text/babel" src="js/components/ui.jsx" .../>
<script type="text/babel" src="js/components/layout.jsx" .../>

<!-- 3. Pages (dùng components ở trên) -->
<script type="text/babel" src="js/pages/Login.jsx" .../>
<!-- ... các pages khác ... -->

<!-- 4. Root app (dùng tất cả pages) -->
<script type="text/babel" src="js/App.jsx" .../>`}</Code>
        </div>
      );

      case 'roles': return (
        <div>
          <H2 icon="fa-user-shield">Phân quyền (RBAC)</H2>
          <P>Hệ thống có 2 role với quyền truy cập khác nhau. Phân quyền được kiểm tra ở cả frontend (UI) và logic nghiệp vụ.</P>
          <Table headers={['Tính năng','Member','Admin']} rows={[
            ['Đăng nhập','✅','✅'],
            ['Xem domain được assign','✅','✅ (tất cả)'],
            ['Tạo domain mới','✅','✅'],
            ['Sửa domain','✅','✅'],
            ['Xoá domain','❌','✅'],
            ['Assign domain cho member','❌','✅'],
            ['Tick/Cập nhật checklist','✅','✅'],
            ['Thêm comment','✅','✅'],
            ['Track keyword','✅','✅'],
            ['Quản lý user','❌','✅'],
            ['Xem tiến độ team','❌','✅'],
            ['Xem activity logs','❌','✅'],
            ['Khoá tài khoản user','❌','✅'],
          ]}/>

          <H3>Kiểm tra quyền trong code</H3>
          <Code>{`// Kiểm tra admin
const isAdmin = Store.isAdmin(); // user?.role === 'admin'
const user = Store.getUser();

// Trong UI — ẩn/hiện button
{isAdmin && <button>Xoá</button>}

// Trong logic — filter data
let doms = domsRes.data || [];
if (!isAdmin) {
  doms = doms.filter(d => d.assigned_to === user.id);
}

// Trong sidebar — ẩn admin-only items
{ id:'users', adminOnly: true }
navItems.map(item => {
  if (item.adminOnly && !isAdmin) return null;
  ...
})`}</Code>

          <H3>Lưu ý bảo mật</H3>
          <P>⚠️ Đây là static site không có backend server-side authentication. Mật khẩu được lưu plain text và xác thực trên client-side. <strong>Không dùng cho môi trường production yêu cầu bảo mật cao.</strong> Để production: cần thêm backend API với JWT + bcrypt.</P>
        </div>
      );

      case 'integration': return (
        <div>
          <H2 icon="fa-link">Integration Points</H2>
          <H3>Table API (Primary Data Store)</H3>
          <P>Toàn bộ CRUD đi qua <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>fetch()</code> đến endpoint <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>tables/{'{table}'}</code> (relative URL).</P>
          <Code>{`// Base URL là relative — tự match với domain hiện tại
fetch('tables/domains?limit=100')
fetch('tables/checklist_items', { method: 'POST', body: JSON.stringify(data) })`}</Code>

          <H3>CDN Libraries</H3>
          <Table headers={['Library','CDN URL','Namespace']} rows={[
            ['React 18','cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js','window.React'],
            ['ReactDOM 18','cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js','window.ReactDOM'],
            ['Babel Standalone','cdn.jsdelivr.net/npm/@babel/standalone@7/babel.min.js','window.Babel'],
            ['Font Awesome','cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.0/css/all.min.css','—'],
            ['Google Fonts','fonts.googleapis.com/css2?family=Inter','—'],
          ]}/>

          <H3>Tích hợp GSC / Rank Checker</H3>
          <P>Hiện tại hệ thống nhập rank thủ công. Để tích hợp tự động:</P>
          <Code>{`// Thêm function gọi rank checker API (nếu có CORS)
async function syncRankFromAPI(keyword, domainName) {
  const res = await fetch('https://your-rank-api.com/check', {
    method: 'POST',
    body: JSON.stringify({ keyword, domain: domainName })
  });
  const { rank } = await res.json();
  await API.patch('keywords', keywordId, { current_rank: rank });
}

// Gọi trong Keywords.jsx sau khi load`}</Code>
        </div>
      );

      case 'extend': return (
        <div>
          <H2 icon="fa-puzzle-piece">Mở rộng hệ thống</H2>

          <H3>Thêm giai đoạn SOP mới</H3>
          <P>Mở <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>js/sop-data.js</code> và thêm object vào mảng <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>SOP_PHASES</code>:</P>
          <Code>{`window.SOP_PHASES = [
  // ... existing phases ...
  {
    id: 14,
    name: "Tên giai đoạn mới",
    icon: "fa-star",
    color: "#e11d48",
    desc: "Mô tả giai đoạn",
    sections: [
      {
        title: "Tên section",
        items: [
          { key: "p14_01", label: "Bước 1", hasInput: false },
          { key: "p14_02", label: "Bước có input", hasInput: true, placeholder: "Nhập..." },
        ]
      }
    ]
  }
];`}</Code>

          <H3>Thêm trang mới</H3>
          <Code>{`// 1. Tạo file js/pages/NewPage.jsx
window.NewPage = function({ user, onNavigate }) {
  return (
    <div className="fade-in">
      <div className="ph">
        <div className="ph-title">Trang mới</div>
      </div>
      {/* ... content ... */}
    </div>
  );
};

// 2. Thêm script tag vào index.html (trước App.jsx)
<script type="text/babel" src="js/pages/NewPage.jsx" data-presets="react"/>

// 3. Thêm nav item vào js/components/layout.jsx
{ id:'new-page', icon:'fa-star', label:'Trang mới' }

// 4. Thêm case vào App.jsx renderPage()
case 'new-page': return <NewPage user={user} onNavigate={navigate}/>;`}</Code>

          <H3>Thêm table mới</H3>
          <Code>{`// 1. Định nghĩa schema (TableSchemaUpdate tool)
// 2. Seed initial data (TableDataAdd tool)
// 3. Dùng API trong component:
const data = await API.get('new_table', { limit: 100 });
const item = await API.post('new_table', { id: uuid(), ...fields });`}</Code>

          <H3>Thêm loại comment</H3>
          <P>Trong <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>DomainDetail.jsx</code>, tìm select dropdown và thêm option mới. Cập nhật các maps <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>typeLabels</code> và <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>typeClsMap</code>.</P>

          <H3>Custom CSS theming</H3>
          <P>Tất cả màu sắc được quản lý qua CSS variables trong <code style={{fontFamily:'monospace',color:'var(--primary)',fontSize:'.82rem'}}>css/app.css</code>:</P>
          <Code css>{`:root {
  --primary: #4f46e5;  /* Màu chủ đạo */
  --cyan: #06b6d4;     /* Màu phụ */
  --green: #10b981;    /* Success */
  --yellow: #f59e0b;   /* Warning */
  --red: #ef4444;      /* Danger */
  --bg: #f1f5f9;       /* Background */
  --card: #ffffff;     /* Card background */
  --sidebar: #0f172a;  /* Sidebar background */
}`}</Code>
        </div>
      );

      default: return <EmptyState icon="fa-question" title="Không tìm thấy nội dung"/>;
    }
  };

  return (
    <div className="fade-in">
      <div className="ph">
        <div>
          <div className="ph-title"><i className="fas fa-code" style={{marginRight:8,color:'var(--primary)'}}/>Developer Documentation</div>
          <div className="ph-sub">Kiến trúc, data models, UI flows, và integration points</div>
        </div>
      </div>

      <div className="two-col" style={{alignItems:'flex-start'}}>
        {/* NAV */}
        <div className="card" style={{position:'sticky',top:80}}>
          <div style={{fontWeight:700,fontSize:'.85rem',marginBottom:12,color:'var(--t3)',textTransform:'uppercase',letterSpacing:'.05em'}}>Nội dung</div>
          <nav style={{display:'flex',flexDirection:'column',gap:2}}>
            {sections.map(s=>(
              <a key={s.id} href="#" onClick={e=>{e.preventDefault();setActiveSection(s.id);}}
                style={{display:'flex',alignItems:'center',gap:9,padding:'8px 10px',borderRadius:8,fontSize:'.84rem',fontWeight:activeSection===s.id?700:500,background:activeSection===s.id?'var(--bg)':'transparent',color:activeSection===s.id?'var(--primary)':'var(--t2)',transition:'.15s'}}>
                <i className={`fas ${s.icon}`} style={{width:16,textAlign:'center',color:activeSection===s.id?'var(--primary)':'var(--t3)'}}/>{s.label}
              </a>
            ))}
          </nav>
        </div>

        {/* CONTENT */}
        <div className="card" style={{minWidth:0}}>
          {renderSection()}
        </div>
      </div>
    </div>
  );
};
