/**
 * テスト用: `robot_error_reports.robot_id` が NULL の行を Prisma が読んだときの失敗をスタブで再現する
 * （指示書AU 段階0-4。§11 Q6。D-158）。
 *
 * ★先方の DDL では `robot_id` が NULL 可（TeamWorks 第11回 P-8 b）、`prisma/schema.prisma` は NOT NULL のまま★。
 *   ★`select` なし（＝全列）・`select.robot_id`・`select.robot`・`include.robot` で NULL の行を読むと、
 *   本物の Prisma は読み取りで落ちる★。スタブは何でも返してしまうので、ここで同じ失敗を起こす。
 *
 * ★`select` で読む列を絞っていれば何もしない★（＝NULL の行が入っても落ちないことをテストで確かめられる）。
 */
export function guardNullRobotId(
  rows: readonly Record<string, unknown>[],
  args: Record<string, unknown> | undefined
): void {
  if (!rows.some((row) => row.robot_id === null)) return;
  const select = args?.select as Record<string, unknown> | undefined;
  const include = args?.include as Record<string, unknown> | undefined;
  const readsRobotId =
    select === undefined ||
    Boolean(select.robot_id) ||
    Boolean(select.robot) ||
    Boolean(include?.robot);
  if (readsRobotId) {
    throw new Error(
      "[stub] robot_error_reports.robot_id が NULL の行を robot_id / robot ごと読んだ（Prisma は NOT NULL として読むので落ちる）。select で必要な列だけにすること（指示書AU 段階0-4）"
    );
  }
}
