package com.airlock.iam.common.domain.model.request;

import com.airlock.iam.base.api.domain.model.exception.ViolationException;
import com.airlock.iam.base.misc.log.LogUtil;
import com.airlock.iam.common.domain.service.session.IdentityStringGenerator;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;

public record RequestId(String id) {
   private static final Pattern ALLOWED_ID = Pattern.compile("[\\x21-\\x7E]{2,256}");

   public RequestId {
      ViolationException.checkTrue(StringUtils.isNotBlank(id), "RequestId must not be blank");
      ViolationException.checkTrue(ALLOWED_ID.matcher(id).matches(), "Invalid RequestId: " + LogUtil.logSafeString(id));
   }

   public static boolean isValidRequestId(String id) {
      return ALLOWED_ID.matcher(id).matches();
   }

   public static RequestId generateRequestId() {
      return new RequestId(IdentityStringGenerator.generateIdentityString());
   }
}
