import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Patch,
  Post,
  UseGuards,
} from '@nestjs/common';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import { Roles } from '../../common/decorators/roles.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { RolesGuard } from '../../common/guards/roles.guard';
import type { AuthUser } from '../../common/types/auth-user.type';
import { CreateNoteDto } from './dto/create-note.dto';
import { UpdateNoteDto } from './dto/update-note.dto';
import { NotesService } from './notes.service';

@UseGuards(JwtAuthGuard, RolesGuard)
@Roles('super_admin', 'agency_manager', 'agent')
@Controller('notes')
export class NotesController {
  constructor(private readonly notesService: NotesService) {}

  @Post()
  create(
    @Body() data: CreateNoteDto,
    @CurrentUser() user: AuthUser,
  ) {
    return this.notesService.createForUser(data, user);
  }

  @Get()
  findAll(@CurrentUser() user: AuthUser) {
    return this.notesService.findAllForUser(user);
  }

  @Get(':id')
  findOne(
    @Param('id') id: string,
    @CurrentUser() user: AuthUser,
  ) {
    return this.notesService.findOneForUser(Number(id), user);
  }

  @Patch(':id')
  update(
    @Param('id') id: string,
    @Body() data: UpdateNoteDto,
    @CurrentUser() user: AuthUser,
  ) {
    return this.notesService.updateForUser(Number(id), data, user);
  }

  @Delete(':id')
  @Roles('super_admin', 'agency_manager')
  remove(
    @Param('id') id: string,
    @CurrentUser() user: AuthUser,
  ) {
    return this.notesService.removeForUser(Number(id), user);
  }
}