import { router, protectedProcedure } from "../_core/trpc.ts";
import { z } from "zod";
import {
  getReferralCode,
  applyReferralCode,
  getReferralStats,
  getTopReferrers,
} from "../services/referralService.ts";

export const referralRouter = router({
  getReferralCode: protectedProcedure.query(async ({ ctx }) => {
    const code = await getReferralCode(ctx.user.id);
    return { referralCode: code };
  }),

  applyReferralCode: protectedProcedure
    .input(z.object({ referralCode: z.string() }))
    .mutation(async ({ ctx, input }) => {
      const result = await applyReferralCode(ctx.user.id, input.referralCode);
      return result;
    }),

  getReferralStats: protectedProcedure.query(async ({ ctx }) => {
    const stats = await getReferralStats(ctx.user.id);
    return stats;
  }),

  getTopReferrers: protectedProcedure
    .input(z.object({ limit: z.number().default(10) }))
    .query(async ({ input }) => {
      const topReferrers = await getTopReferrers(input.limit);
      return topReferrers;
    }),
});
