import { Controller, Get, Query } from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { PrismaService } from '../../prisma/prisma.service';
import { Roles } from '../../common/decorators/roles.decorator';
import {
  CurrentUser,
  AuthenticatedUser,
} from '../../common/decorators/current-user.decorator';

@ApiTags('audit')
@ApiBearerAuth()
@Controller('audit-trail')
export class AuditController {
  constructor(private readonly prisma: PrismaService) {}

  @Get()
  @Roles('SUPERADMIN', 'SYNDIC')
  list(
    @CurrentUser() user: AuthenticatedUser,
    @Query('limit') limit?: string,
    @Query('entity') entity?: string,
  ) {
    return this.prisma.auditTrail.findMany({
      where: {
        ...(user.isSuperAdmin ? {} : { tenantId: user.tenantId }),
        ...(entity && { entity }),
      },
      orderBy: { createdAt: 'desc' },
      take: limit ? Math.min(parseInt(limit, 10), 500) : 100,
      include: {
        user: { select: { id: true, email: true, firstName: true, lastName: true } },
      },
    });
  }
}
