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 createModule(app: FastifyInstance) {
  app
    .withTypeProvider<ZodTypeProvider>()
    .post('/modules/:courseId', {
      schema: {
        summary: 'Create a module',
        tags: ['modules'],
        params: z.object({
          courseId: z.string().cuid()
        }),
        body: z.object({
          title: z.string().min(4),
          description: z.string(),
        }),
        response: {
          201: z.object({
            moduleId: z.string().cuid(),
          })
        },
      },
    }, async (request, reply) => {

      const {
        title,
        description,
      } = request.body;

      const { courseId } = request.params

      // Check if a module with the same title already exists
      const slug = generateSlug(title)

      const moduleWithSameSlug = await prisma.module.findFirst({
        where: {
          slug,
        }
      })

      if (moduleWithSameSlug !== null) {
        throw new BadRequest('Another module with the same title already exists.');
      }

      // Create the module in the database
      const module = await prisma.module.create({
        data: {
          title,
          description,
          slug,
          courseId
        },
      });

      console.log(module)

      return reply.status(201).send({ moduleId: module.id });
    });
}
