import { Router } from "express";

import { authenticate, authorize } from "../../middleware/auth.js";
import { validate } from "../../middleware/validate.js";
import { asyncHandler } from "../../utils/http.js";
import { recordUserClicks, getStats } from "./stats.service.js";
import { statsQuerySchema, userClicksBodySchema } from "./stats.schemas.js";

export const statsRouter = Router();

statsRouter.get(
  "/",
  authenticate,
  authorize("admin"),
  validate({ query: statsQuerySchema }),
  asyncHandler(async (request, response) => {
    const data = await getStats({
      from: request.query.from as string | undefined,
      to: request.query.to as string | undefined
    });

    response.json({ data });
  })
);

statsRouter.post(
  "/clicks",
  authenticate,
  validate({ body: userClicksBodySchema }),
  asyncHandler(async (request, response) => {
    await recordUserClicks(request.authUser!.id, request.body.count);
    response.status(204).send();
  })
);
