package com.airlock.iam.common.infrastructure.util;

import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.base.misc.collection.Pair;
import com.airlock.iam.common.api.domain.model.user.UserIdentity;
import com.airlock.iam.security.util.SeededSecureRandom;
import java.util.Random;

public final class RestIds {
   private static final Random RANDOM_GENERATOR = SeededSecureRandom.getInstance();

   private RestIds() {
   }

   public static String combineIds(UserId userId, String elementId) {
      return String.format("%s:%s", userId.getValue(), elementId);
   }

   public static String combineIds(UserIdentity userId, String elementId) {
      return combineIds(userId.id(), elementId);
   }

   public static Pair<String, String> splitId(String id) {
      int lastColon = id.lastIndexOf(58);
      String userId = id.substring(0, lastColon == -1 ? id.length() : lastColon);
      String elementId = lastColon == -1 ? "" : id.substring(lastColon + 1);
      return Pair.pair(userId, elementId);
   }

   public static String generateId() {
      long time = System.currentTimeMillis() % 10000L;
      long random = Math.abs(RANDOM_GENERATOR.nextInt() % 10000);
      return String.format("%04d:%04d", time, random);
   }
}
