import {
  GetLeaderboardRes,
  LeaderboardRepository,
} from "@server/repository/leaderboard";
import { Hono } from "hono";

export const leaderboard = new Hono()

  /**
   * Get users leaderboard
   */
  .get("/", async (c) => {
    const query = c.req.query();
    const repo = new LeaderboardRepository();

    let result: GetLeaderboardRes;

    switch (query.type) {
      case "lang":
        result = await repo.getTopLanguages();
        break;
      case "lang-users":
        result = await repo.getTopUsersByLang(query.lang);
        break;
      case "user":
      case "":
        result = await repo.getTopUsers();
        break;
      default:
        throw new Error("Invalid query type");
    }

    return c.json(result);
  })

  /**
   * Get specific user data
   */
  .get("/:username", async (c) => {
    const { username } = c.req.param();
    const repo = new LeaderboardRepository();
    const result = await repo.getUserRank(username);

    return c.json(result);
  });