import { describe, expect, it } from "vitest";
import { sha256 } from "@/server/casino/dice";
import { calculateMinesMultiplier, calculateMinesTiles, verifyMines } from "@/server/casino/mines";

describe("mines game engine", () => {
  it("calculates progressive 3-mine multipliers with a 1% house edge", () => {
    expect(calculateMinesMultiplier({ mines: 3, revealed: 0 }).toString()).toBe("1");
    expect(calculateMinesMultiplier({ mines: 3, revealed: 1 }).toString()).toBe("1.125");
    expect(calculateMinesMultiplier({ mines: 3, revealed: 2 }).toString()).toBe("1.285714");
  });

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

    expect(calculateMinesTiles(input)).toEqual(tiles);
    expect(new Set(tiles).size).toBe(5);
    expect(tiles.every((tile) => tile >= 0 && tile < 25)).toBe(true);
    expect(verifyMines(input)).toEqual({
      serverSeedHash: sha256(input.serverSeed),
      mineTiles: tiles
    });
  });
});
