// CompareTotals: both sides' costs/savings/region counts plus the B−A
// deltas — cost colored good-when-negative, savings good-when-positive,
// region delta signed with zero unsigned. Fabricated OverviewDiff.

import { describe, expect, it } from "vitest";
import { render, screen } from "@testing-library/react";
import { CompareTotals } from "@/components/compare/CompareTotals";
import type { OverviewDiff } from "@/lib/api-types";

function mkDiff(over: Partial<OverviewDiff["totals"]> = {}): OverviewDiff {
  return {
    dateA: "2026-01-02",
    dateB: "2026-01-05",
    runIdA: "run-20260102T010000",
    runIdB: "run-20260105T010000",
    totals: {
      a: { monthlyCostUsd: 1500, potentialMonthlySavingsUsd: 20, regions: 4 },
      b: { monthlyCostUsd: 1200, potentialMonthlySavingsUsd: 45, regions: 3 },
      delta: { monthlyCostUsd: -300, potentialMonthlySavingsUsd: 25 },
      ...over,
    },
    regions: [],
    addedRegions: [],
    removedRegions: [],
  };
}

describe("CompareTotals", () => {
  it("renders both dates' costs, savings, and region counts", () => {
    render(<CompareTotals diff={mkDiff()} />);
    expect(screen.getByText("A — 2026-01-02")).toBeInTheDocument();
    expect(screen.getByText("B — 2026-01-05")).toBeInTheDocument();
    expect(screen.getByText("$1,500.00")).toBeInTheDocument();
    expect(screen.getByText("$1,200.00")).toBeInTheDocument();
    expect(screen.getByText("$20.00")).toBeInTheDocument();
    expect(screen.getByText("$45.00")).toBeInTheDocument();
    expect(screen.getByText("4")).toBeInTheDocument();
    expect(screen.getByText("3")).toBeInTheDocument();
  });

  it("colors a cost drop as good and a cost rise as bad", () => {
    const { rerender } = render(<CompareTotals diff={mkDiff()} />);
    expect(screen.getByText("-$300.00")).toHaveClass("text-success");

    rerender(
      <CompareTotals
        diff={mkDiff({
          delta: { monthlyCostUsd: 300, potentialMonthlySavingsUsd: 0 },
        })}
      />,
    );
    expect(screen.getByText("+$300.00")).toHaveClass("text-danger");
  });

  it("colors a savings rise as good and a drop as bad", () => {
    const { rerender } = render(<CompareTotals diff={mkDiff()} />);
    expect(screen.getByText("+$25.00")).toHaveClass("text-success");

    rerender(
      <CompareTotals
        diff={mkDiff({
          delta: { monthlyCostUsd: 0, potentialMonthlySavingsUsd: -10 },
        })}
      />,
    );
    expect(screen.getByText("-$10.00")).toHaveClass("text-danger");
  });

  it("signs the region delta and renders zero unsigned", () => {
    const { rerender } = render(<CompareTotals diff={mkDiff()} />);
    expect(screen.getByText("-1")).toBeInTheDocument();

    rerender(
      <CompareTotals
        diff={mkDiff({
          b: { monthlyCostUsd: 1200, potentialMonthlySavingsUsd: 45, regions: 4 },
        })}
      />,
    );
    expect(screen.getByText("0")).toBeInTheDocument();
    expect(screen.queryByText("+0")).toBeNull();
  });
});
