import { PRECHECK_MINUTES_BEFORE } from "@/lib/config";
import type { PrecheckItem } from "@/lib/types";
import { at } from "./_helpers";

// ★分数を直書きしないための別名（禁止事項3 / CLAUDE.md §7）★
//   `PRECHECK_MINUTES_BEFORE`（`lib/config/index.ts`）は事前チェックの回次順（60分前 → 30分前）。
//   設定値が変われば fixtures のラベルも一緒に変わるのが正しい。
const [FIRST_ROUND_MINUTES, SECOND_ROUND_MINUTES] = PRECHECK_MINUTES_BEFORE;

/**
 * アラート（事前チェック）のサンプルデータ
 *
 * docs/fixtures.md §3 のケースを網羅。
 *   - ★事前チェック異常（`severity: "precheck"`）だけ★（ユーザー判断 2026-10-29。アラートは出発失敗を出さない）。
 *     旧 `launch_failed`（出発失敗）の id 4 / 8 は消した（★id は振り直さない★。4・8 は欠番）
 *   - 分数の3通り（60分前 / 30分前 / 20分前）
 *   - 3ステータスすべて（未解消 / 対応中 / 解消）
 *   - 解消済み: responded_at と resolved_at の両方あり
 *   - 対応中:   responded_at のみ、resolved_at は null
 *   - 未解消:   両方 null
 *   - バッテリー低下（Pudu APIで取得可能と確認済み）
 *   - ★`main_run_succeeded`（親の本清掃が ◎○ か。D-171）は各行に明示する★ —
 *     ★true は id 6（「30分前までに充電完了、出発成功」）だけ★。id 7（完了率62% ＝ △）・
 *     ほかは false。★対応状況・件数はこの値で変わらない★（画面がカードを控えめにするだけ）
 *
 * ★ responded_at / resolved_at の2カラム構成は D-013（TeamWorks回答待ち）★
 *   APIスキーマは2カラム前提で先行実装している。
 *
 * ★★`robot_status` は日本語のまま置いている（指示書S 2-4 の判断。D-105）★★
 *   実DB経由では `robot_error_reports.error_type` の生値がそのまま入る（D-077 / D-098）ので、
 *   英語識別子に寄せたほうが「実データに近い fixtures」にはなる。★それでも寄せない★:
 *   1. ★`lib/fixtures/clean-logs.ts` の `status_1h` / `status_30m` が日本語のまま★で、
 *      `scripts/seed-local-db.ts` はその値を `error_type` に**そのまま**入れている。
 *      こちらだけ英語にすると、同じロボット状態が fixtures では英語・ローカルDBでは
 *      日本語という ★逆向きの食い違い★ が生まれる（2ファイルを同時に変える話になり、
 *      それは `prechecks` 1本という本指示書の範囲を超える）。
 *   2. ★`ROBOT_STATUS_TONES`（`lib/config/index.ts`）は日本語6値の完全一致で色を引く★ため、
 *      英語に寄せると fixtures のデモがすべてグレーになる。指示書R（D-099 項2-2）も
 *      ★`Standby.` を `ROBOT_STATUS_TONES` に足さない★という同じ側の判断をしている。
 *   ★帰結★: `USE_FIXTURES` の true / false で `robot_status` の値が一部違う（★想定内★）。
 *   ★実データの `error_type` を受領したら（D-090 項18）まとめて寄せる★。
 */
export const prechecks: PrecheckItem[] = [
  // --- 未解消（両方 null） ---
  {
    id: "1",
    severity: "precheck",
    precheck_minutes: FIRST_ROUND_MINUTES,
    serial_number: "8111R5628060022",
    facility_id: 2,
    facility_name: "バリューマート北町店",
    scheduled_at: at(0, "02:00"),
    robot_status: "ハンドルアップ",
    detected_at: at(0, "01:00"),
    resolution_status: "unresolved",
    responded_at: null,
    resolved_at: null,
    note: "30分前も未解消 → 出発失敗",
    battery_level: 78,
    main_run_succeeded: false,
  },
  {
    id: "2",
    severity: "precheck",
    precheck_minutes: SECOND_ROUND_MINUTES,
    serial_number: "8111R5628060077",
    facility_id: 6,
    facility_name: "バリューマート南丘駅前店",
    scheduled_at: at(0, "02:30"),
    robot_status: "オフライン",
    detected_at: at(0, "02:00"),
    resolution_status: "unresolved",
    responded_at: null,
    resolved_at: null,
    note: "30分前もオフライン → 出発失敗",
    battery_level: null,
    main_run_succeeded: false,
  },
  {
    // バッテリー低下のケース
    id: "3",
    severity: "precheck",
    precheck_minutes: FIRST_ROUND_MINUTES,
    serial_number: "8111R5628060133",
    facility_id: 9,
    facility_name: "メガバリューマート三ツ橋中央ショッピングセンター店",
    scheduled_at: at(0, "02:30"),
    robot_status: "充電中",
    detected_at: at(0, "01:30"),
    resolution_status: "unresolved",
    responded_at: null,
    resolved_at: null,
    note: "バッテリー残量が低く、予定時刻までに充電完了しない可能性",
    battery_level: 12,
    main_run_succeeded: false,
  },
  {
    // ★★境界値: 設定値（PRECHECK_MINUTES_BEFORE = 60 / 30）以外の任意の分数★★
    //   D-093 項2「20だったら20分前になります」を、型と画面が本当に表現できるかの検証。
    //   ★この1件だけは分数を設定値から取らない★ — 設定値と一致してしまうと
    //   「設定値以外でも出るか」という確認そのものが成立しない（禁止事項3 の例外）。
    id: "9",
    severity: "precheck",
    precheck_minutes: 20,
    serial_number: "8111R5628060011",
    facility_id: 1,
    facility_name: "メガバリューマート中央本店",
    scheduled_at: at(0, "02:00"),
    robot_status: "オフライン",
    detected_at: at(0, "01:40"),
    resolution_status: "unresolved",
    responded_at: null,
    resolved_at: null,
    note: null,
    battery_level: null,
    main_run_succeeded: false,
  },

  // --- 対応中（responded_at のみ） ---
  // ★id 4（出発失敗）は 2026-10-29 に消した（アラートは出発失敗を出さない）★
  {
    id: "5",
    severity: "precheck",
    precheck_minutes: SECOND_ROUND_MINUTES,
    serial_number: "8111R5628060011",
    facility_id: 1,
    facility_name: "メガバリューマート中央本店",
    scheduled_at: at(1, "02:00"),
    robot_status: "ハンドルアップ",
    detected_at: at(1, "01:30"),
    resolution_status: "in_progress",
    responded_at: at(1, "09:02"),
    resolved_at: null,
    note: "店舗責任者にヒアリング中",
    battery_level: 64,
    main_run_succeeded: false,
  },

  // --- 解消（両方あり） ---
  {
    id: "6",
    severity: "precheck",
    precheck_minutes: FIRST_ROUND_MINUTES,
    serial_number: "8111R5628060011",
    facility_id: 1,
    facility_name: "メガバリューマート中央本店",
    scheduled_at: at(1, "02:00"),
    robot_status: "充電中",
    detected_at: at(1, "01:00"),
    resolution_status: "resolved",
    responded_at: at(1, "01:20"),
    resolved_at: at(1, "01:45"),
    note: "30分前までに充電完了、出発成功",
    battery_level: 88,
    // ★出発成功（親の本清掃は ◎○）→ true★（D-171）。画面ではカードが控えめになる
    main_run_succeeded: true,
  },
  {
    id: "7",
    severity: "precheck",
    precheck_minutes: FIRST_ROUND_MINUTES,
    serial_number: "8111R5628060099",
    facility_id: 7,
    facility_name: "メガバリューマート緑野店",
    scheduled_at: at(1, "01:30"),
    robot_status: "緊急停止",
    detected_at: at(1, "00:30"),
    resolution_status: "resolved",
    responded_at: at(1, "00:50"),
    resolved_at: at(1, "01:10"),
    note: "30分前に復旧、出発成功（完了率62%）",
    battery_level: 71,
    // ★出発はしたが完了率62% ＝ △ → false★（D-171 の M3）
    main_run_succeeded: false,
  },
  // ★id 8（出発失敗）は 2026-10-29 に消した（アラートは出発失敗を出さない）★
];

/**
 * 該当0件の日（未解消が0件 = サマリカードが0表示になる）を確認したいときは、
 * date_from / date_to に 2日前か3日前を指定してください（データは今日と昨日だけ。2日前の id 8 は 2026-10-29 に消した）。
 */
