import { router, publicProcedure, protectedProcedure } from "../_core/trpc.ts";
import { z } from "zod";
import * as leaderboardService from "../services/leaderboardService.ts";

export const competitiveFeatures = router({
  // Leaderboard procedures
  leaderboard: router({
    getLeaderboard: publicProcedure
      .input(
        z.object({
          period: z.enum(["weekly", "daily", "global", "game_specific"]),
          limit: z.number().default(100),
        })
      )
      .query(({ input }) => {
        return leaderboardService.getLeaderboard(input.period, input.limit);
      }),

    getPlayerRank: protectedProcedure
      .input(
        z.object({
          period: z.enum(["weekly", "daily", "global", "game_specific"]),
        })
      )
      .query(({ input, ctx }) => {
        return leaderboardService.getUserRank(ctx.user.id, input.period);
      }),

    getPrizePool: publicProcedure
      .input(
        z.object({
          period: z.enum(["weekly", "daily", "global", "game_specific"]),
        })
      )
      .query(({ input }) => {
        return leaderboardService.getPrizePool(input.period);
      }),

    calculatePrize: publicProcedure
      .input(
        z.object({
          period: z.enum(["weekly", "daily", "global", "game_specific"]),
          rank: z.number(),
        })
      )
      .query(({ input }) => {
        return leaderboardService.calculatePrize(input.period, input.rank);
      }),
  }),
});
