import { describe, expect, it } from "vitest";
import { calculateDiceNumbers, calculateDiceResult, isDiceWin, sha256, verifyDice } from "@/server/casino/dice";

describe("dice game engine", () => {
  it("calculates the same default odds as a 1% house-edge dice game", () => {
    const dice = calculateDiceNumbers({ chance: 49.5, direction: "over" });

    expect(dice.multiplier.toString()).toBe("2");
    expect(dice.target.toString()).toBe("50.5");
  });

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

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

  it("settles over and under directions from the same target", () => {
    expect(isDiceWin({ result: 77.77, target: 50.5, direction: "over" })).toBe(true);
    expect(isDiceWin({ result: 50.5, target: 50.5, direction: "over" })).toBe(false);
    expect(isDiceWin({ result: 12.34, target: 49.5, direction: "under" })).toBe(true);
  });
});
