import { Request, Response } from 'express';
import ActivityLog from '../schema/activity-log.schema';
import { buildTextSearch, parsePagination, paginationMeta } from '../../../helpers/query.helper';

export class ActivityLogController {
  static async list(req: Request, res: Response) {
    try {
      const { page, limit, skip } = parsePagination(req, 10);
      const userId = req.query.userId ? String(req.query.userId) : null;
      const action = String(req.query.action || '').trim();

      const filter: Record<string, unknown> = {};
      if (userId) filter.userId = userId;
      if (action) filter.action = action;

      const search = buildTextSearch(
        ['userName', 'userEmail', 'action', 'resource', 'details'],
        String(req.query.q || '')
      );
      if (search.$or) Object.assign(filter, search);

      const [items, total] = await Promise.all([
        ActivityLog.find(filter).sort({ createdAt: -1 }).skip(skip).limit(limit),
        ActivityLog.countDocuments(filter),
      ]);

      return res.status(200).json({
        success: true,
        response: items,
        pagination: paginationMeta(page, limit, total),
      });
    } catch {
      return res.status(500).json({ success: false, message: 'System error' });
    }
  }
}
