"""Tests for the ID minters."""
from __future__ import annotations

import re

import pytest

from apps.smehub._shared.calls import generate_application_id, generate_call_id


def test_application_id_format():
    val = generate_application_id("INC")
    assert re.fullmatch(r"INC-[0-9A-F]{8}", val), val


def test_application_id_uppercases_prefix():
    val = generate_application_id("inv")
    assert val.startswith("INV-")


def test_call_id_format():
    val = generate_call_id("ISD")
    assert re.fullmatch(r"ISD-CALL-[0-9A-F]{8}", val), val


def test_application_id_uniqueness_under_load():
    """Generate enough IDs to catch trivial collisions early."""
    seen = {generate_application_id("INC") for _ in range(2000)}
    assert len(seen) == 2000


def test_application_id_rejects_empty_prefix():
    with pytest.raises(ValueError):
        generate_application_id("")


def test_application_id_rejects_non_alpha_prefix():
    with pytest.raises(ValueError):
        generate_application_id("IN-C")
    with pytest.raises(ValueError):
        generate_application_id("123")


def test_call_id_rejects_empty_prefix():
    with pytest.raises(ValueError):
        generate_call_id("")
