import { Controller, Get, Post, Put, Delete, Body, Param, Query } from '@nestjs/common';
import { Roles } from '../../../common/decorators/roles.decorator';
import { CurrentUser, AuthenticatedUser } from '../../../common/decorators/current-user.decorator';
import { ContractService } from '../services/contract.service';
import { CreateContractDto, UpdateContractDto } from '../dto/contract.dto';

@Controller('contracts')
export class ContractController {
  constructor(private readonly contractService: ContractService) {}

  @Roles('SUPERADMIN', 'SYNDIC')
  @Get()
  async getContracts(@CurrentUser() user: AuthenticatedUser, @Query('complexId') complexId: string) {
    return this.contractService.getContracts(user.tenantId!, complexId);
  }

  @Roles('SUPERADMIN', 'SYNDIC')
  @Post()
  async createContract(@CurrentUser() user: AuthenticatedUser, @Body() dto: CreateContractDto) {
    return this.contractService.createContract(user.tenantId!, dto);
  }

  @Roles('SUPERADMIN', 'SYNDIC')
  @Get(':id')
  async getContract(@CurrentUser() user: AuthenticatedUser, @Param('id') id: string) {
    return this.contractService.getContract(user.tenantId!, id);
  }

  @Roles('SUPERADMIN', 'SYNDIC')
  @Put(':id')
  async updateContract(@CurrentUser() user: AuthenticatedUser, @Param('id') id: string, @Body() dto: UpdateContractDto) {
    return this.contractService.updateContract(user.tenantId!, id, dto);
  }

  @Roles('SUPERADMIN', 'SYNDIC')
  @Delete(':id')
  async deleteContract(@CurrentUser() user: AuthenticatedUser, @Param('id') id: string) {
    return this.contractService.deleteContract(user.tenantId!, id);
  }
}
