import { FastifyInstance } from "fastify";
import { ZodTypeProvider } from "fastify-type-provider-zod";
import z from "zod";
import { prisma } from "../../lib/prisma";
import { BadRequest } from "../_errors/bad-request";

export async function userCourse(app: FastifyInstance) {
  app
    .withTypeProvider<ZodTypeProvider>()
    .get('/user-course/:userId/:courseId', {
      schema: {
        summary: 'Check-in an user',
        tags: ['user-course'],
        params: z.object({
          userId: z.string().cuid(),
          courseId: z.string().cuid(),
          expire: z.string().optional()
        }),
        response: {
          201: z.null(),
        }
      }
    }, async (request, reply) => {
      const {
        userId,
        courseId,
        expire 
      } = request.params

      const userCheckIn = await prisma.userCourse.findFirst({
        where: {
          userId,
          courseId, 
        }
      })

      if (userCheckIn !== null) {
        throw new BadRequest('User already checked in!')
      }

      await prisma.userCourse.create({
        data: {
          userId,
          courseId,
          expire
        }
      })

      return reply.status(201).send()
    })
}