import { Request, Response, NextFunction } from 'express';
import { AuditMode, AuditModeType } from '@/shared/constants/enum.constant';

type SetAuditOpts = {
  mode: AuditModeType;
  companyField?: 'companyId' | 'company';
};

export const setAuditFields =
  (options: SetAuditOpts) =>
  (req: Request, _res: Response, next: NextFunction) => {
    const userId = req.user?.id;
    const companyId = req.user?.company?.id;

    if (!userId) return next();

    if (options.mode === AuditMode.CREATE) {
      req.body.createdBy = userId;
      req.body.updatedBy = userId;
    } else if (options.mode === AuditMode.UPDATE) {
      req.body.updatedBy = userId;
    }

    if (companyId && options.companyField && !req.body[options.companyField])
      req.body[options.companyField] = companyId;

    next();
  };
