import { FastifyInstance } from "fastify";
import { ZodTypeProvider } from "fastify-type-provider-zod";
import { z } from "zod";
import { generateSlug } from "../../utils/generate-slug"
import { prisma } from "../../lib/prisma";
import { BadRequest } from "../_errors/bad-request";

export async function createClass(app: FastifyInstance) {
  app
  .withTypeProvider<ZodTypeProvider>()
  .post('/classes/:moduleId', {
    schema: {
      summary: 'Create a classe',
      tags: ['classes'],
      params: z.object({
        moduleId: z.string().cuid(),
      }),
      body: z.object({
        title: z.string().min(4),
        video: z.string().min(4),
        description: z.string(),
        duration: z.number()
      }),
      response: {
        201: z.object({
          classId: z.string().cuid(),
        })
      },
    },
  }, async (request, reply) => {

    const {
      title,
      video,
      description,
      duration
      } = request.body;

      const { moduleId } = request.params


    // Check if a class with the same title already exists
    const slug = generateSlug(title)

    const classWithSameSlug = await prisma.class.findUnique({
      where: {
        slug
      }
    })

    if (classWithSameSlug !== null) {
      throw new BadRequest('Another class with the same title already exists.');
    }

    // Create the class in the database
    const classCreated = await prisma.class.create({
      data: {
        title,
        video,
        slug,
        description,
        duration, 
        moduleId     
      },
    });

    return reply.status(201).send({ classId: classCreated.id });
  });
}
