import { useEffect, useRef, useState } from 'react'
import ReactMarkdown from 'react-markdown'
import remarkGfm from 'remark-gfm'
import { queryDocuments } from '../api/api'
import CitationPanel from './CitationPanel'
import { useToast } from './Toast'
import { useAuth } from '../contexts/AuthContext'
const WELCOME = {
role: 'assistant',
content: `Hello! I'm **ASK Docs**, your intelligent document assistant.\n\nUpload a document using the sidebar, then ask me anything about it — I'll answer with contextual accuracy, grounded in your document content.`,
citations: [],
}
function mdToHtml(raw) {
const escaped = raw
.replace(/&/g, '&')
.replace(//g, '>')
const lines = escaped.split('\n')
const out = []
let inUl = false, inOl = false, inPre = false
for (let i = 0; i < lines.length; i++) {
let l = lines[i]
// fenced code blocks
if (l.trim().startsWith('```')) {
if (!inPre) { out.push('
'); inPre = true }
else { out.push('
'); inPre = false }
continue
}
if (inPre) { out.push(l + '\n'); continue }
// close lists on blank line
if (!l.trim()) {
if (inUl) { out.push(''); inUl = false }
if (inOl) { out.push(''); inOl = false }
out.push(' ')
continue
}
// headings
if (/^### /.test(l)) { out.push(`
${l.slice(4)}
`); continue }
if (/^## /.test(l)) { out.push(`
${l.slice(3)}
`); continue }
if (/^# /.test(l)) { out.push(`
${l.slice(2)}
`); continue }
// unordered list
if (/^[-*] /.test(l)) {
if (!inUl) { out.push('
'); inUl = true }
l = `
${l.slice(2)}
`
out.push(inlineMd(l)); continue
}
// ordered list
if (/^\d+\. /.test(l)) {
if (!inOl) { out.push(''); inOl = true }
l = `
${l.replace(/^\d+\. /, '')}
`
out.push(inlineMd(l)); continue
}
// close open lists
if (inUl) { out.push('