import "../../../tests/web/test-utils";
import { render } from "@testing-library/react";
import { describe, expect, test, vi } from "bun:test";

import type { TargetStatus } from "../../../src/shared/api";

import { TargetGroup } from "../../../src/web/components/TargetGroup";

describe("TargetGroup", () => {
  const columns = [
    { colKey: "name", title: "名称" },
    { colKey: "target", title: "目标" },
  ];

  const targets: TargetStatus[] = [
    {
      currentStreak: null,
      description: null,
      group: "default",
      id: "1",
      interval: "30s",
      latestCheck: {
        detail: "200 OK",
        durationMs: 100,
        failure: null,
        matched: true,
        observation: null,
        timestamp: "2025-01-15T10:00:00.000Z",
      },
      name: "target-1",
      recentSamples: [],
      stats: { availability: 100, downChecks: 0, totalChecks: 10, upChecks: 10 },
      target: "https://example.com",
      type: "http",
    },
    {
      currentStreak: null,
      description: null,
      group: "default",
      id: "2",
      interval: "30s",
      latestCheck: {
        detail: "500 Internal Server Error",
        durationMs: 100,
        failure: { kind: "error", message: "Failed", path: "$", phase: "status" },
        matched: false,
        observation: null,
        timestamp: "2025-01-15T10:00:00.000Z",
      },
      name: "target-2",
      recentSamples: [],
      stats: { availability: 50, downChecks: 1, totalChecks: 2, upChecks: 1 },
      target: "https://example.org",
      type: "http",
    },
  ];

  const onTargetClick = vi.fn();

  test("default 分组不崩溃", () => {
    const { container } = render(
      <TargetGroup columns={columns} name="default" onTargetClick={onTargetClick} targets={targets} />,
    );
    expect(container.firstChild).not.toBeNull();
  });

  test("非 default 分组不崩溃", () => {
    const { container } = render(
      <TargetGroup columns={columns} name="production" onTargetClick={onTargetClick} targets={targets} />,
    );
    expect(container.firstChild).not.toBeNull();
  });

  test("空 targets 不崩溃", () => {
    const { container } = render(
      <TargetGroup columns={columns} name="default" onTargetClick={onTargetClick} targets={[]} />,
    );
    expect(container.firstChild).not.toBeNull();
  });
});
