import assert from "node:assert/strict";
import { describe, it } from "node:test";
import { readFileSync } from "node:fs";
import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";

const __dirname = dirname(fileURLToPath(import.meta.url));
const source = readFileSync(join(__dirname, "TableControls.vue"), "utf8");
const styles = readFileSync(join(__dirname, "../styles/main.css"), "utf8");

describe("TableControls wide-table scroll dock", () => {
  it("creates an app-level horizontal scroll dock for wide mode instead of relying on native scrollbars", () => {
    assert.match(source, /function ensureWideTableScrollDock\(/);
    assert.match(source, /className = "table-scroll-dock"/);
    assert.match(source, /aria-label", "宽表横向滚动"/);
    assert.match(source, /table-scroll-dock-track/);
    assert.match(source, /table-scroll-dock-thumb/);
    assert.match(source, /table-scroll-dock-arrow/);
  });

  it("keeps the scroll dock synchronized with the table wrapper scroll position", () => {
    assert.match(source, /function syncWideTableScrollDock\(/);
    assert.match(source, /wideScrollWrap\.scrollLeft/);
    assert.match(source, /wideScrollWrap\.scrollWidth - wideScrollWrap\.clientWidth/);
    assert.match(source, /wideScrollThumb\.style\.transform/);
    assert.match(source, /wideScrollThumb\.style\.width/);
  });

  it("supports dragging the custom thumb and using left-right step arrows", () => {
    assert.match(source, /pointerdown/);
    assert.match(source, /setPointerCapture/);
    assert.match(source, /function nudgeWideTableScrollDock\(/);
    assert.match(source, /wideScrollWrap\.scrollBy/);
  });

  it("styles the scroll dock as the accepted visible low-friction control", () => {
    assert.match(styles, /body \.table-scroll-dock/);
    assert.match(styles, /body \.table-scroll-dock-track/);
    assert.match(styles, /body \.table-scroll-dock-thumb/);
    assert.match(styles, /body \.table-scroll-dock-arrow/);
    assert.match(styles, /body \.table-view-wide \+ \.table-scroll-dock/);
  });
});
