import type { Request, Response, NextFunction } from 'express';
import * as auditLogModel from '../models/auditLog.model.js';
import { successResponse } from '../utils/response.js';

function parsePage(query: Request['query']) {
  const page = Math.max(1, Math.trunc(Number(query.page)) || 1);
  const pageSize = Math.min(100, Math.max(1, Math.trunc(Number(query.pageSize)) || 20));
  return { page, pageSize, skip: (page - 1) * pageSize, take: pageSize };
}

async function getAuditLogs(req: Request, res: Response, next: NextFunction) {
  try {
    const { page, pageSize, skip, take } = parsePage(req.query);
    const filter = {
      organizationId: req.query.organizationId ? Number(req.query.organizationId) : undefined,
      action: typeof req.query.action === 'string' ? req.query.action : undefined,
      sinceDays: req.query.sinceDays ? Number(req.query.sinceDays) : undefined,
    };
    const { items, total } = await auditLogModel.getAuditLogs(filter, { skip, take });
    return successResponse(res, 'Audit logs fetched successfully', { items, total, page, pageSize });
  } catch (error) {
    next(error);
    return;
  }
}

export { getAuditLogs };
