// 5단계: 화면은 4단계와 동일(업로드+삭제+출처). '대화 기억'은 서버(세션 메모리)에서 처리되어 보이지 않는다.
function renderFiles(files) {
  const el = document.getElementById('files');
  el.innerHTML = (files && files.length)
    ? '문서: ' + files.map(f => f + ' <a href="#" onclick="del(\'' + f + '\');return false">[삭제]</a>').join(' | ')
    : '(문서 없음)';
}

async function up() {
  const f = document.getElementById('f').files[0];
  if (!f) return;
  const fd = new FormData();
  fd.append('file', f);
  const d = await (await fetch('/upload', { method: 'POST', body: fd })).json();
  add('시스템', d.message || d.error);
  renderFiles(d.files);
}

async function del(name) {
  const d = await (await fetch('/files/' + encodeURIComponent(name), { method: 'DELETE' })).json();
  add('시스템', d.message || d.error);
  renderFiles(d.files);
}

async function ask() {
  const box = document.getElementById('q');
  const q = box.value.trim();
  if (!q) return;
  add('나', q);
  box.value = '';
  const d = await (await fetch('/ask', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ question: q }),
  })).json();
  const s = (d.sources && d.sources.length)
    ? ' <i style="color:#888">(출처: ' + d.sources.join(', ') + ')</i>' : '';
  add('봇', d.answer + s);
}

function add(who, text) {
  const l = document.getElementById('log');
  l.innerHTML += '<p><b>' + who + ':</b> ' + text + '</p>';
  l.scrollTop = l.scrollHeight;
}

document.getElementById('q').addEventListener('keydown', e => { if (e.key === 'Enter') ask(); });
