import { Controller, Get, Param, ParseIntPipe, Query, UseGuards } from '@nestjs/common';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { PermissionsGuard } from '../auth/guards/permissions.guard';
import { Permissions } from '../auth/permissions.decorator';
import { AuditLogsService } from './audit-logs.service';

@Controller('api/v1/admin/audit-logs')
@UseGuards(JwtAuthGuard, PermissionsGuard)
export class AuditLogsController {
  constructor(private readonly auditService: AuditLogsService) {}

  @Get()
  @Permissions('audit.view')
  async findAll(
    @Query('userId') userId?: string,
    @Query('action') action?: string,
    @Query('entityType') entityType?: string,
    @Query('entityId') entityId?: string,
    @Query('from') from?: string,
    @Query('to') to?: string,
    @Query('page') page?: string,
    @Query('limit') limit?: string,
  ) {
    const { items, meta } = await this.auditService.findAll({
      userId: userId ? Number(userId) : undefined,
      action,
      entityType,
      entityId: entityId ? Number(entityId) : undefined,
      from,
      to,
      page: page ? Number(page) : undefined,
      limit: limit ? Number(limit) : undefined,
    });
    return { success: true, message: 'Success', data: items, meta };
  }

  @Get('entity/:entityType/:entityId')
  @Permissions('audit.view')
  async findByEntity(
    @Param('entityType') entityType: string,
    @Param('entityId', ParseIntPipe) entityId: number,
  ) {
    const data = await this.auditService.findByEntity(entityType, entityId);
    return { success: true, message: 'Success', data };
  }
}
