// Simple ULID generator
// ULID format: 01234567890123456789012345 (26 characters)
// Time (10 chars) + Random (16 chars)

const ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
const TIME_LEN = 10;
const RANDOM_LEN = 16;

const getRandomChar = (): string => {
  return ENCODING[Math.floor(Math.random() * ENCODING.length)];
};

const encodeTime = (now: number): string => {
  let time = "";
  let num = now;

  for (let i = 0; i < TIME_LEN; i++) {
    time = ENCODING[num % ENCODING.length] + time;
    num = Math.floor(num / ENCODING.length);
  }

  return time;
};

const encodeRandom = (): string => {
  let random = "";
  for (let i = 0; i < RANDOM_LEN; i++) {
    random += getRandomChar();
  }
  return random;
};

export const generateULID = (): string => {
  const now = Date.now();
  return encodeTime(now) + encodeRandom();
};
