import { describe, expect, it } from "vitest";
import { calculateLimboNumbers, calculateLimboResult, isLimboWin, verifyLimbo } from "@/server/casino/limbo";
import { sha256 } from "@/server/casino/dice";

describe("limbo game engine", () => {
  it("calculates a classic 2x target with a 1% house edge", () => {
    const limbo = calculateLimboNumbers({ multiplier: 2 });

    expect(limbo.multiplier.toString()).toBe("2");
    expect(limbo.target.toString()).toBe("2");
    expect(limbo.chance.toString()).toBe("49.5");
  });

  it("uses deterministic provably fair multipliers", () => {
    const input = {
      serverSeed: "server-seed-for-test-0000000000000001",
      clientSeed: "client-seed-for-test",
      nonce: 42
    };

    expect(calculateLimboResult(input)).toBe(calculateLimboResult(input));
    expect(verifyLimbo(input)).toEqual({
      serverSeedHash: sha256(input.serverSeed),
      result: calculateLimboResult(input).toFixed(2)
    });
  });

  it("settles the target multiplier inclusively", () => {
    expect(isLimboWin({ result: 2.01, target: 2 })).toBe(true);
    expect(isLimboWin({ result: 2, target: 2 })).toBe(true);
    expect(isLimboWin({ result: 1.99, target: 2 })).toBe(false);
  });
});
