import {
  Controller, Get, Post, Put, Delete,
  Body, Param, Query, UseGuards, Req
} from '@nestjs/common';
import { HolidaysService } from './holidays.service';
import { CreateHolidayDto } from './dto/create-holiday.dto';
import { UpdateHolidayDto } from './dto/update-holiday.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('holidays')
@UseGuards(JwtAuthGuard)
export class HolidaysController {
  constructor(private readonly holidaysService: HolidaysService) {}

  // Lister tous les jours fériés
  @Get()
  findAll(@Query('year') year?: string) {
    return this.holidaysService.findAll(year ? +year : undefined);
  }

  // Détail d'un jour férié
  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.holidaysService.findOne(+id);
  }

  // Créer un jour férié (responsable agence ou directeur)
  @Post()
  @UseGuards(RolesGuard)
  @Roles(Role.AGENCY_MANAGER, Role.DIRECTOR)
  create(@Req() req, @Body() dto: CreateHolidayDto) {
    return this.holidaysService.create(dto, req.user);
  }

  // Modifier un jour férié
  @Put(':id')
  @UseGuards(RolesGuard)
  @Roles(Role.AGENCY_MANAGER, Role.DIRECTOR)
  update(@Param('id') id: string, @Body() dto: UpdateHolidayDto) {
    return this.holidaysService.update(+id, dto);
  }

  // Supprimer un jour férié
  @Delete(':id')
  @UseGuards(RolesGuard)
  @Roles(Role.AGENCY_MANAGER, Role.DIRECTOR)
  remove(@Param('id') id: string) {
    return this.holidaysService.remove(+id);
  }
}