import random
import string

class CredentialPolicyError(Exception):
    pass

def generate_credentials(user_mode: str, character_length: int, character_mode: str) -> tuple[str, str]:
    if character_length < 4 or character_length > 32:
        raise CredentialPolicyError("Panjang karakter harus antara 4 dan 32")
    
    if character_mode == "numeric":
        chars = string.digits
    elif character_mode == "alpha":
        chars = string.ascii_lowercase
    elif character_mode == "mixed_alnum":
        chars = string.ascii_letters + string.digits
    else:
        raise CredentialPolicyError(f"Mode karakter '{character_mode}' tidak didukung")
        
    username = "".join(random.choices(chars, k=character_length))
    
    if user_mode == "same":
        password = username
    elif user_mode == "separate":
        password = "".join(random.choices(chars, k=character_length))
    else:
        raise CredentialPolicyError(f"Mode pengguna '{user_mode}' tidak didukung")
        
    return username, password
