import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from '@nestjs/common';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import { LotsService } from './lots.service';
import { CreateLotDto } from './dto/create-lot.dto';
import { SetTantiemesDto } from './dto/set-tantiemes.dto';
import { CreateVehicleDto } from './dto/create-vehicle.dto';
import { Roles } from '../../common/decorators/roles.decorator';

@ApiTags('Lots')
@ApiBearerAuth()
@Controller('lots')
export class LotsController {
  constructor(private readonly lotsService: LotsService) {}

  @Roles('SYNDIC')
  @Post()
  create(@Body() dto: CreateLotDto) {
    return this.lotsService.create(dto);
  }

  @Get()
  list(@Query('complexId') complexId: string) {
    return this.lotsService.findByComplex(complexId);
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.lotsService.findOne(id);
  }

  @Roles('SYNDIC')
  @Post(':id/tantiemes')
  setTantiemes(@Param('id') id: string, @Body() dto: SetTantiemesDto) {
    return this.lotsService.setTantiemes(id, dto);
  }

  @Get(':id/vehicles')
  listVehicles(@Param('id') id: string) {
    return this.lotsService.listVehicles(id);
  }

  @Roles('SYNDIC', 'COPROPRIETAIRE', 'LOCATAIRE')
  @Post(':id/vehicles')
  addVehicle(@Param('id') id: string, @Body() dto: CreateVehicleDto) {
    return this.lotsService.addVehicle(id, dto);
  }

  @Roles('SYNDIC', 'SUPERADMIN')
  @Patch(':id')
  @ApiOperation({ summary: 'Update a lot' })
  update(@Param('id') id: string, @Body() dto: CreateLotDto) {
    return this.lotsService.update(id, dto);
  }

  @Roles('SYNDIC', 'SUPERADMIN')
  @Delete(':id')
  @ApiOperation({ summary: 'Delete a lot' })
  remove(@Param('id') id: string) {
    return this.lotsService.remove(id);
  }
}
