import {
  Controller,
  Post,
  Get,
  Put,
  UseGuards,
  Req,
  Delete,
  Param,
  Body,
} from '@nestjs/common';
import { LessonsService } from './lessons.service';
import { CreateLessonDto } from './dto/create-lesson.dto';
import { UpdateLessonDto } from './dto/update-lesson.dto';
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
import { RolesGuard } from '../auth/roles.guard';
import { Roles } from '../auth/roles.decorator';

@Controller('courses/:courseId/lessons')
export class LessonsController {
  constructor(private lessonsService: LessonsService) {}

  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('trainer', 'admin')
  @Post('create')
  create(@Param('courseId') courseId: string, @Body() dto: CreateLessonDto) {
    return this.lessonsService.createLesson(+courseId, dto);
  }

  @Get('findAll')
  findAll(@Param('courseId') courseId: string) {
    return this.lessonsService.getLessons(+courseId);
  }

  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('trainer', 'admin')
  @Put(':lessonId')
  update(
    @Param('courseId') courseId: string,
    @Param('lessonId') lessonId: string,
    @Body() dto: UpdateLessonDto,
    @Req() req,
  ) {
    return this.lessonsService.updateLesson(
      +courseId,
      +lessonId,
      dto,
      req.user,
    );
  }

  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('trainer', 'admin')
  @Delete(':lessonId')
  remove(
    @Param('courseId') courseId: string,
    @Param('lessonId') lessonId: string,
    @Req() req,
  ) {
    return this.lessonsService.deleteLesson(+courseId, +lessonId, req.user);
  }
}
