<!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>Data &amp; AI PoC 도구 사용자에게 접근 토큰을 발급합니다. 토큰 원문은 한 번만 표시하며, DB에는 SHA-256 해시와 식별용 prefix만 보관합니다.</p>
    </details>
  </div>

  <div class="alert alert-success" th:if="${message}" th:text="${message}"></div>
  <section class="issued-token-card" th:if="${issued}" th:attr="data-issued-key-id=${issued.keyId()}">
    <span class="architecture-kicker">발급 완료 · 지금 한 번만 표시됩니다</span>
    <h2>이 토큰 원문을 복사해 안전한 위치에 보관하세요.</h2>
    <code class="token-value" id="issued-token-value" th:text="${issued.plainToken()}"></code>
    <div class="action-stack mt-3">
      <button class="btn rw-btn-primary" type="button" data-copy-source="issued-token-value">토큰 원문 복사</button>
      <a class="btn rw-btn-secondary" href="/users">사용자 역할 관리</a>
    </div>
    <p class="form-hint mb-0">화면을 떠난 뒤에는 원문을 다시 볼 수 없습니다. 잃어버리면 기존 토큰을 복구하지 말고 새로 발급하세요.</p>
  </section>

  <section class="content-band">
    <div class="section-heading">
      <div>
        <h2>도구 사용자 토큰 발급</h2>
        <p class="section-subtitle">활성 Data &amp; AI PoC 사용자에게 토큰을 발급합니다. 직접 역할과 접근 그룹 역할은 토큰 재발급 없이 조회 시점에 반영됩니다.</p>
      </div>
    </div>
    <form method="post" action="/tokens" class="form-grid">
      <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
      <label>
        도구 사용자
        <select class="form-select" name="userId" required>
          <option value="" selected disabled>토큰을 발급할 직원 선택</option>
          <option th:each="user : ${users}"
                  th:value="${user.userId()}"
                  th:text="${user.empNo() + ' / ' + user.username() + ' / ' + user.deptCode()}"></option>
        </select>
      </label>
      <label>
        만료 시각
        <input class="form-control" name="expiresAt" type="datetime-local" th:value="${defaultExpiresAt}" required>
      </label>
      <label>
        용도 메모
        <input class="form-control" name="description" maxlength="200" placeholder="예: 게임 데이터 AI 질의 검증">
      </label>
      <button class="btn rw-btn-primary" type="submit">검증 세션 발급</button>
    </form>
  </section>

  <section class="content-band">
    <div class="section-heading">
      <div>
        <h2>발급 이력</h2>
        <p class="section-subtitle">보안상 prefix와 상태만 보관합니다. 기본 목록은 현재 사용 가능한 토큰만 보여주며, 회수·만료 이력은 필터를 켜서 확인합니다.</p>
      </div>
      <div class="action-stack">
        <span class="badge text-bg-secondary" th:text="${#lists.size(tokens)}">0</span>
        <form method="get" action="/tokens" class="inline-form">
          <label class="form-check">
            <input class="form-check-input" type="checkbox" name="includeInactive" value="true"
                   th:checked="${includeInactive}">
            <span class="form-check-label">회수·만료 포함</span>
          </label>
          <button class="btn btn-sm rw-btn-secondary" type="submit">필터 적용</button>
        </form>
      </div>
    </div>
    <div class="table-responsive">
      <table class="table table-sm align-middle">
        <thead><tr><th>ID</th><th>직원</th><th>용도</th><th>식별용 Prefix</th><th>만료</th><th>회수</th><th></th></tr></thead>
        <tbody>
        <tr th:each="token : ${tokens}"
            th:attr="data-key-id=${token.keyId()},data-description=${token.description()},data-revoked=${token.revokedAt() != null}">
          <td th:text="${token.keyId()}">1</td>
          <td th:text="${token.username()}">user</td>
          <td th:text="${token.description()} ?: '-'">용도</td>
          <td><code th:text="${token.keyPrefix() + '****'}">vpd_****</code></td>
          <td th:text="${token.expiresAt()}">2026</td>
          <td th:text="${token.revokedAt()} ?: '-'">-</td>
          <td>
            <form method="post" action="/tokens/revoke" class="inline-form">
              <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
              <input type="hidden" name="keyId" th:value="${token.keyId()}">
              <input type="hidden" name="reason" value="manual">
              <button class="btn btn-sm btn-outline-danger" type="submit" th:disabled="${token.revokedAt() != null}">회수</button>
            </form>
          </td>
        </tr>
        <tr th:if="${#lists.isEmpty(tokens)}"><td colspan="7" class="text-muted">아직 발급된 토큰이 없습니다.</td></tr>
        </tbody>
      </table>
    </div>
  </section>
</main>
</body>
</html>
