/**
 * `facilities.contract`（10桁の文字列。D-080）↔ 契約フラグの変換。
 *
 * ★数値として比較しないこと★ — `Number("0000000000")` は例外を出さずに `0` になり、
 * `contract === 3` のような比較は絶対に真にならない。結果として全施設が
 * 「契約なし」になるが、例外もテスト失敗も出ない（D-080）。
 *
 * ここでは文字の完全一致（`contract[i] === "1"`）だけで判定する。
 * 桁位置は `lib/config/index.ts` の `CONTRACT_DIGITS` から読み、ここに直書きしない。
 */
import { CONTRACT_DIGITS } from "@/lib/config";

export interface ContractFlags {
  monitoring_enabled: boolean;
  d_security_enabled: boolean;
}

const CONTRACT_LENGTH = 10;

/**
 * `contract` 文字列からフラグを取り出す。
 *
 * ★桁が足りない文字列・空文字・10桁を超える文字列でも例外を投げない★
 * 該当する桁が存在しなければ `undefined === "1"` は `false` になり、自然に「契約なし」扱いになる。
 */
export function parseContract(contract: string): ContractFlags {
  return {
    d_security_enabled: contract[CONTRACT_DIGITS.dSecurity] === "1",
    monitoring_enabled: contract[CONTRACT_DIGITS.dWatch] === "1",
  };
}

/**
 * フラグから `contract` 文字列（10桁）を組み立てる（seed が fixtures から逆算するときに使う）。
 */
export function buildContract(flags: ContractFlags): string {
  const digits = Array<string>(CONTRACT_LENGTH).fill("0");
  if (flags.d_security_enabled) digits[CONTRACT_DIGITS.dSecurity] = "1";
  if (flags.monitoring_enabled) digits[CONTRACT_DIGITS.dWatch] = "1";
  return digits.join("");
}
