/**
 * 生値ラベルの空値表示（指示書O / D-089）。
 *
 * D-077（エラー種別等の生値は変換しない）を維持したまま、値が「空である」場合だけ
 * その事実を示す代替文言に差し替える純粋関数。値が入っている場合は加工しない
 * （前後の空白のトリムのみ許容する。指示書O 禁止事項2「トリム以外の変換をしない」）。
 *
 * null / undefined / 空文字 / 空白のみ は同じ扱いにする（指示書O 段階2 仕様）。
 *
 * ★代替文言は `(値なし)` を採用★ — 「DBのカラムが空である」という事実だけを述べ、
 * 推測を含まない（D-077 の「推測でマッピングしない」に反しない）。
 * 「その他」は D-067（破棄済み）の「未知の値をその他に寄せる」方針と紛らわしく、
 * 「不明」は「エラーの内容が不明」とも読めてしまうため採らなかった（指示書O 3案比較）。
 *
 * ★DB アクセスなし・例外を投げない純粋関数。lib/judge/ には置かない★
 * （あちらは◎○△×等の評価ロジックの置き場所。こちらは表示整形。CLAUDE.md §9.1）。
 */

export const EMPTY_VALUE_LABEL = "(値なし)";

export function formatRawLabel(value: string | null | undefined): string {
  if (value == null) {
    return EMPTY_VALUE_LABEL;
  }
  const trimmed = value.trim();
  return trimmed === "" ? EMPTY_VALUE_LABEL : trimmed;
}
