import {
  BadRequestException,
  Body,
  Controller,
  Delete,
  Get,
  Param,
  ParseIntPipe,
  Post,
  Put,
  Query,
} from '@nestjs/common';
import { AnnotationsService } from './annotations.service';
import { SaveAnnotationDto, UpdateAnnotationDto } from './dto/annotation.dto';

@Controller('api/v1/annotations')
export class AnnotationsController {
  constructor(private readonly service: AnnotationsService) {}

  @Post()
  async save(@Body() dto: SaveAnnotationDto) {
    const data = await this.service.save(dto);
    return { success: true, message: 'Annotation saved', data };
  }

  @Get()
  async find(@Query('sessionId') sessionId: string, @Query('activityId') activityId?: string) {
    if (!sessionId) throw new BadRequestException('sessionId is required');

    const data = activityId
      ? await this.service.findForActivity(sessionId, Number(activityId))
      : await this.service.findBySession(sessionId);

    return { success: true, message: 'Success', data };
  }

  @Put(':id')
  async update(@Param('id', ParseIntPipe) id: number, @Body() dto: UpdateAnnotationDto) {
    const data = await this.service.update(id, dto);
    return { success: true, message: 'Annotation updated', data };
  }

  @Delete(':id')
  async delete(@Param('id', ParseIntPipe) id: number, @Query('sessionId') sessionId: string) {
    if (!sessionId) throw new BadRequestException('sessionId is required');
    const success = await this.service.delete(id, sessionId);
    return { success, message: success ? 'Annotation deleted' : 'Annotation not found' };
  }
}
