import {
  Body,
  Controller,
  Get,
  Param,
  Patch,
  Post,
} from '@nestjs/common';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import { TenantsService } from './tenants.service';
import { CreateTenantDto } from './dto/create-tenant.dto';
import { UpdateFeatureToggleDto } from './dto/update-feature-toggle.dto';
import { Roles } from '../../common/decorators/roles.decorator';

@ApiTags('Tenants (SaaS)')
@ApiBearerAuth()
@Controller('tenants')
export class TenantsController {
  constructor(private readonly tenantsService: TenantsService) {}

  @Roles('SUPERADMIN')
  @Post()
  @ApiOperation({ summary: 'Create a new Syndic tenant + admin user' })
  create(@Body() dto: CreateTenantDto) {
    return this.tenantsService.create(dto);
  }

  @Roles('SUPERADMIN')
  @Get()
  findAll() {
    return this.tenantsService.findAll();
  }

  @Roles('SUPERADMIN', 'SYNDIC')
  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.tenantsService.findOne(id);
  }

  @Roles('SUPERADMIN')
  @Patch(':id/features')
  updateFeature(@Param('id') id: string, @Body() dto: UpdateFeatureToggleDto) {
    return this.tenantsService.updateFeatureToggle(id, dto);
  }

  @Roles('SUPERADMIN')
  @Patch(':id/suspend')
  suspend(@Param('id') id: string) {
    return this.tenantsService.suspend(id);
  }

  @Roles('SUPERADMIN')
  @Patch(':id/activate')
  activate(@Param('id') id: string) {
    return this.tenantsService.activate(id);
  }

  @Roles('SUPERADMIN')
  @Post(':id/invoices/generate')
  @ApiOperation({ summary: 'Generate SaaS invoice for current period' })
  generateInvoice(@Param('id') id: string) {
    return this.tenantsService.generateInvoice(id);
  }
}
