import { describe, expect, it } from "vitest";
import { calculatePlinkoPath, plinkoMultipliers, verifyPlinko } from "@/server/casino/plinko";
import { sha256 } from "@/server/casino/dice";

describe("plinko game engine", () => {
  it("creates deterministic paths and matching buckets", () => {
    const first = calculatePlinkoPath({
      serverSeed: "server-seed-123456",
      clientSeed: "client-seed",
      nonce: 7,
      rows: 12
    });
    const second = calculatePlinkoPath({
      serverSeed: "server-seed-123456",
      clientSeed: "client-seed",
      nonce: 7,
      rows: 12
    });

    expect(first).toEqual(second);
    expect(first.path).toHaveLength(12);
    expect(first.bucket).toBe(first.path.filter((step) => step === "R").length);
    expect(first.bucket).toBeGreaterThanOrEqual(0);
    expect(first.bucket).toBeLessThanOrEqual(12);
  });

  it("verifies the bucket multiplier and server hash", () => {
    const verified = verifyPlinko({
      serverSeed: "server-seed-123456",
      clientSeed: "client-seed",
      nonce: 7,
      rows: 12,
      risk: "medium"
    });

    expect(verified.serverSeedHash).toBe(sha256("server-seed-123456"));
    expect(Number(verified.multiplier)).toBe(plinkoMultipliers[12].medium[verified.bucket]);
    expect(verified.path).toHaveLength(12);
  });
});
