import { Role } from '../models/Role';

function escapeRegex(s: string): string {
  return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

/**
 * User.role trong DB có thể là **tên hiển thị** (System Administrator) hoặc **mã** (ADMIN).
 */
export async function resolveRoleByUserField(roleField: string | undefined | null) {
  if (roleField == null || typeof roleField !== 'string') {
    return null;
  }
  const raw = roleField.trim();
  if (!raw) {
    return null;
  }

  let role = await Role.findOne({ name: raw, isActive: true }).lean();
  if (role) return role;

  const codeUpper = raw.toUpperCase();
  role = await Role.findOne({ code: codeUpper, isActive: true }).lean();
  if (role) return role;

  role = await Role.findOne({
    isActive: true,
    name: { $regex: new RegExp(`^${escapeRegex(raw)}$`, 'i') },
  }).lean();
  if (role) return role;

  role = await Role.findOne({
    isActive: true,
    code: { $regex: new RegExp(`^${escapeRegex(codeUpper)}$`, 'i') },
  }).lean();
  return role;
}
