// @vitest-environment jsdom
//
// SRC-002 (Loop 5): die Beleg-Kette in der U-08-Tabelle — Rolle → Blatt →
// Zelle → Formel → Wertzustand. Der Test prüft die Kette wörtlich und die
// Gegenprobe (kein Beleg → ehrliches „—", nichts erfunden).
//
// FIXTURE-DATEN-REGEL: alle Werte sind freie Erfindung.

import { afterEach, describe, expect, it } from "vitest"
import { cleanup, render, screen } from "@testing-library/react"
import { QafV2DifferencesTable } from "@/components/qaf-differences/qaf-v2-differences-table"
import type { TableSpec } from "@/lib/qaf-differences/internal/table-specs"

afterEach(() => {
  cleanup()
})

const zeile = (over: Record<string, unknown> = {}) => ({
  differenceId: "D-MFG-001",
  anchorRow: 12,
  namesAward: ["Station 4"],
  namesCurrent: ["Station 4"],
  matchType: "exact",
  valueAward: 1.1,
  valueCurrent: 2.2,
  delta: 1.1,
  unit: "EUR_per_piece",
  bucket: null,
  findingIds: [],
  cells: [],
  ...over,
})

const spec = (rows: ReturnType<typeof zeile>[]): TableSpec =>
  ({
    rows,
    totalRows: rows.length,
    displayedDeltaSum: rows.reduce((s, r) => s + (r.delta ?? 0), 0),
    hidden: { count: 0, deltaSum: 0 },
    noticeDe: null,
  }) as unknown as TableSpec

describe("QafV2DifferencesTable — Beleg-Kette (SRC-002)", () => {
  it("zeigt Blatt!Zelle je Seite, Formel im title und abweichenden Wertzustand", () => {
    render(
      <QafV2DifferencesTable
        spec={spec([
          zeile({
            cells: [
              {
                fileRole: "current",
                sheet: "Fertigungskosten",
                cell: "W15",
                formula: "=SUMME(W3:W14)",
                valueState: "formula_and_cached",
              },
              {
                fileRole: "award",
                sheet: "Fertigungskosten",
                cell: "W15",
                formula: null,
                valueState: "empty",
              },
            ],
          }),
        ])}
      />
    )
    const belege = screen.getAllByText(/Fertigungskosten!W15/)
    expect(belege.length).toBe(2)
    // Rollen-Reihenfolge: award zuerst — und Rolle + Formel stehen im title.
    expect(belege[0].closest("span")?.getAttribute("title")).toContain("Vergabestand")
    expect(belege[1].closest("span")?.getAttribute("title")).toContain("Formel: =SUMME(W3:W14)")
    // Abweichender Wertzustand ist benannt, nicht versteckt — der normale
    // (formula_and_cached) trägt keinen Zusatz.
    expect(screen.getByText(/\(leer\)/)).toBeTruthy()
    expect(screen.queryByText(/formula_and_cached/)).toBeNull()
  })

  it('zeigt ohne Beleg ehrlich einen Strich (Gegenprobe: nichts wird erfunden)', () => {
    render(<QafV2DifferencesTable spec={spec([zeile()])} />)
    const zellen = screen.getAllByRole("cell")
    expect(zellen[zellen.length - 1].textContent).toBe("—")
  })
})
