/**
 * GET /error-lists — エラー内容の選択肢（`error_lists`。エラー一覧のセレクトリスト用。指示書BD §3-1。D-184。読み取り専用）
 *
 * 形は `app/api/groups/route.ts` と同じ。仕様の正は `d-watch-api.yaml` の /error-lists。
 *
 * ★GET だけ★ — `error_lists` は先方が管理する表（管理側UIなし。ユーザー回答① 2026-10-27）。
 *   アプリが書くのは `robot_error_reports.error_list_id`（`PATCH /errors/{error_id}/status`）だけ。
 *
 * ★有効な行だけ・id の昇順★ — データ層（`db.errorLists()`。規則の正は `activeErrorListItems()`）が済ませて返す。
 *   ★`GET /groups` と違い `inactive` でも絞る★（無効化した選択肢を新たに選ばせない）。
 * ★文字列は DB の値のまま★（`t()` に通さない・変換しない。D-077 と同じ）。
 *
 * ★認証はここに書かない★ — `proxy.ts` が全ルートを横断して判定する。
 * ★ページングしない★（`GET /groups` と同じ。`meta` は `masterListResponse()`）。
 */
import { NextResponse } from "next/server";
import { db } from "@/lib/db";
import { masterListResponse } from "@/lib/masters/query";
import { withRequestId } from "@/lib/logger";
import { logApiError } from "@/lib/logger/api";
import type { ApiError, ErrorListItem, ErrorListsResponse } from "@/lib/types";

const ROUTE = "/api/error-lists";

export async function GET(request: Request) {
  return withRequestId(request, async () => {
    // ★クエリパラメータを持たないので 422 の分岐が無い★（`app/api/groups/route.ts` と同じ）
    let items: ErrorListItem[];
    try {
      items = await db.errorLists();
    } catch (e) {
      const body: ApiError = {
        error: {
          code: "internal_error",
          message: "データの取得に失敗しました",
          details: null,
        },
      };
      logApiError({ route: ROUTE, method: "GET", body, status: 500, err: e });
      return NextResponse.json(body, { status: 500 });
    }

    const body: ErrorListsResponse = masterListResponse(items);
    return NextResponse.json(body);
  });
}
