import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { AuditLog } from '../../common/entities/audit-log.entity';

@Injectable()
export class AuditLogService {
  constructor(
    @InjectRepository(AuditLog)
    private readonly auditLogRepository: Repository<AuditLog>
  ) {}

  async findAll(query: {
    page?: number;
    limit?: number;
    entityName?: string;
    action?: string;
    userId?: number;
  }) {
    const { page = 1, limit = 20, entityName, action, userId } = query;
    const skip = (page - 1) * limit;

    const queryBuilder =
      this.auditLogRepository.createQueryBuilder('audit_logs'); // Aliased as 'audit_logs' matching table name usually, or just 'log'

    if (entityName) {
      queryBuilder.andWhere('audit_logs.entityName LIKE :entityName', {
        entityName: `%${entityName}%`,
      });
    }

    if (action) {
      queryBuilder.andWhere('audit_logs.action = :action', { action });
    }

    if (userId) {
      queryBuilder.andWhere('audit_logs.userId = :userId', { userId });
    }

    queryBuilder.orderBy('audit_logs.createdAt', 'DESC').skip(skip).take(limit);

    const [data, total] = await queryBuilder.getManyAndCount();

    return {
      data,
      meta: {
        total,
        page: Number(page),
        limit: Number(limit),
        totalPages: Math.ceil(total / limit),
      },
    };
  }
}
