import { Controller, Get, Put, Body, UseGuards } from '@nestjs/common';
import {
  ApiTags,
  ApiBearerAuth,
  ApiOperation,
  ApiResponse,
} from '@nestjs/swagger';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { CurrentTenant } from '../../common/decorators/current-tenant.decorator';
import { RequirePermission } from '../../common/decorators/require-permission.decorator';
import { NotificationsService } from './notifications.service';
import { UpdateConfigDto } from './dto/update-config.dto';

@ApiTags('notifications')
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@Controller('notifications')
export class NotificationsController {
  constructor(private readonly notificationsService: NotificationsService) {}

  @Get('config')
  @RequirePermission('notifications.view')
  @ApiOperation({
    summary: 'Get notification configuration',
    description: 'Returns notification settings for this license',
  })
  @ApiResponse({
    status: 200,
    description: 'Notification config retrieved successfully',
  })
  async getConfig(@CurrentTenant() licenseId: string) {
    const config = await this.notificationsService.getConfig(licenseId);
    return { config };
  }

  @Put('config')
  @RequirePermission('notifications.manage')
  @ApiOperation({
    summary: 'Update notification configuration',
    description: 'Update notification settings for this license',
  })
  @ApiResponse({
    status: 200,
    description: 'Notification config updated successfully',
  })
  async updateConfig(
    @CurrentTenant() licenseId: string,
    @Body() dto: UpdateConfigDto,
  ) {
    const config = await this.notificationsService.updateConfig(licenseId, dto);
    return { config };
  }
}
