import {
  Controller, Get, Post, Put,
  Delete, Body, Param, UseGuards, Req
} from '@nestjs/common';
import { AnnouncementsService } from './announcements.service';
import { CreateAnnouncementDto } from './dto/create-announcement.dto';
import { UpdateAnnouncementDto } from './dto/update-announcement.dto';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { RolesGuard } from '../common/guards/roles.guard';
import { Roles, Role } from '../common/decorators/roles.decorator';

@Controller('announcements')
@UseGuards(JwtAuthGuard)
export class AnnouncementsController {
  constructor(private readonly announcementsService: AnnouncementsService) {}

  // Annonces visibles par l'utilisateur connecté
  @Get()
  findAll(@Req() req) {
    return this.announcementsService.findAll(req.user);
  }

  // Toutes les annonces (admin)
  @Get('admin')
  @UseGuards(RolesGuard)
  @Roles(Role.AGENCY_MANAGER, Role.DIRECTOR)
  findAllAdmin() {
    return this.announcementsService.findAllAdmin();
  }

  // Détail
  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.announcementsService.findOne(+id);
  }

  // Créer
  @Post()
  @UseGuards(RolesGuard)
  @Roles(Role.AGENCY_MANAGER, Role.DIRECTOR)
  create(@Req() req, @Body() dto: CreateAnnouncementDto) {
    return this.announcementsService.create(dto, req.user);
  }

  // Modifier
  @Put(':id')
  @UseGuards(RolesGuard)
  @Roles(Role.AGENCY_MANAGER, Role.DIRECTOR)
  update(@Req() req, @Param('id') id: string, @Body() dto: UpdateAnnouncementDto) {
    return this.announcementsService.update(+id, dto, req.user);
  }

  // Publier
  @Put(':id/publish')
  @UseGuards(RolesGuard)
  @Roles(Role.AGENCY_MANAGER, Role.DIRECTOR)
  publish(@Req() req, @Param('id') id: string) {
    return this.announcementsService.publish(+id, req.user);
  }

  // Supprimer
  @Delete(':id')
  @UseGuards(RolesGuard)
  @Roles(Role.AGENCY_MANAGER, Role.DIRECTOR)
  remove(@Req() req, @Param('id') id: string) {
    return this.announcementsService.remove(+id, req.user);
  }
}