<!doctype html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head th:replace="~{fragments/layout :: head('검색 해석')}"></head>
<body>
<nav th:replace="~{fragments/layout :: nav}"></nav>
<main class="container py-4">
  <div class="page-title">
    <h1>검색 해석</h1>
    <details class="explanation-details">
      <summary>도움말</summary>
      <p>질문을 근거로 MCP tool을 고르고, Bearer Token으로 ORDS 행 접근 결과를 조회한 뒤 모델이 설명합니다.</p>
    </details>
  </div>

  <div class="alert alert-warning" th:if="${runtimeError}">
    <strong th:text="${runtimeError.title()}">DB 연결 설정이 필요합니다.</strong>
    <span th:text="${runtimeError.message()}">message</span>
    <div th:if="${runtimeError.showSupportCommand()}">
      <code>./run.sh backoffice-support</code>
    </div>
  </div>

  <section class="content-band">
    <div class="section-heading">
      <h2>권한 결과 해석</h2>
      <a class="btn btn-sm btn-outline-secondary" href="/mcp/tools" target="_blank" rel="noreferrer">도구 JSON</a>
    </div>
    <form hx-post="/mcp-reasoning" hx-target="#mcp-result" hx-swap="innerHTML" class="form-grid token-form">
      <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
      <label>
        Bearer Token 원문
        <input class="form-control" name="bearerToken" type="password" autocomplete="off">
        <span class="form-hint">원문을 붙여 넣거나 검증 세션 사용자를 선택하세요.</span>
        <details class="explanation-details">
          <summary>토큰 처리 방식 보기</summary>
          <p>등록 토큰을 목록에서 선택하지 않습니다. 원문은 저장하지 않고 요청에만 사용합니다.</p>
        </details>
      </label>
      <label>
        검증 세션 사용자 (선택)
        <select class="form-select" name="tempUserId">
          <option value="">원문 토큰 사용</option>
          <option th:each="user : ${users}" th:value="${user.userId()}" th:text="${user.username()}"></option>
        </select>
        <span class="form-hint">실행 중 발급하고 완료 즉시 폐기합니다.</span>
        <details class="explanation-details">
          <summary>검증 세션 상세 보기</summary>
          <p>선택하면 reasoning 실행 중 10분 세션을 발급하고 완료 즉시 폐기합니다.</p>
        </details>
      </label>
      <label>
        Limit
        <input class="form-control" name="limit" type="number" min="1" max="500" value="50">
      </label>
      <label class="span-2">
        질문
        <textarea class="form-control" id="mcp-reasoning-question" name="question" rows="3"
                  placeholder="비워도 조회 행, ASO 마스킹 컬럼, 권한 범위, 다음 조치를 요약합니다."></textarea>
      </label>
      <div class="question-presets span-2" aria-label="질문 예시">
        <button class="btn rw-btn-secondary question-preset" type="button"
                  data-question="CB_VECTOR_SEARCH_DOCUMENTS에서 이 토큰이 볼 수 있는 기술 태그 검색 단위 수와 행 접근 정책이 제외한 범위를 요약해줘.">
          기본 분석
        </button>
        <button class="btn rw-btn-secondary question-preset" type="button"
                  data-question="SPRING_BOOT와 ORACLE_VPD 태그를 여러 개 허용한 권한이 OR로 적용됐는지, 컬럼 표시 보호와 구분해 설명해줘.">
          민감 컬럼 점검
        </button>
        <button class="btn rw-btn-secondary question-preset" type="button"
                  data-question="반환된 검색 단위의 기술 태그와 권한 규칙을 근거로 어떤 지식 범위를 조회할 수 있는지 판단해줘. 추정이면 추정이라고 표시해줘.">
          태그 권한 범위 판단
        </button>
        <button class="btn rw-btn-secondary question-preset" type="button"
                  data-question="ORDS path, 행 접근 policy, TAG permission, token 상태 중 이상 징후를 먼저 bullet로 요약하고 다음 확인 순서를 제시해줘.">
          운영 점검 요약
        </button>
      </div>
      <button class="btn rw-btn-primary" type="submit">Reasoning 실행</button>
    </form>
  </section>

  <section class="content-band">
    <div class="section-heading">
      <h2>사용 가능한 MCP Tool (사전 선택 없음)</h2>
      <span class="badge text-bg-secondary" th:text="${#lists.size(tools)}">0</span>
    </div>
    <div class="table-responsive">
      <table class="table table-sm align-middle">
        <thead>
        <tr>
          <th>MCP Tool</th>
          <th>ORDS Path</th>
          <th>설명</th>
        </tr>
        </thead>
        <tbody>
        <tr th:each="tool : ${tools}">
          <td><code th:text="${tool.name()}">ords.query.admin.board_posts</code></td>
          <td><code th:text="${tool.ordsPath()}">path</code></td>
          <td th:text="${tool.description()}">ORDS 행 접근 조회 도구</td>
        </tr>
        <tr th:if="${#lists.isEmpty(tools)}">
          <td colspan="3" class="text-muted">등록된 보호 객체 도구가 없습니다.</td>
        </tr>
        </tbody>
      </table>
    </div>
  </section>

  <section id="mcp-result" class="content-band">
    <div class="text-muted">실행하면 ORDS 호출 결과, 모델 요약, request/response 증거가 한 번에 표시됩니다.</div>
  </section>
</main>
<script>
  document.querySelectorAll('.question-preset').forEach((button) => {
    button.addEventListener('click', () => {
      const question = document.getElementById('mcp-reasoning-question');
      question.value = button.dataset.question || '';
      question.focus();
    });
  });

</script>
</body>
</html>
