import secrets
import string


def get_random_string(length):
    """
    Create a random crypto-safe sequence of 'length' or more characters
    Possible characters: alphanumeric, '-' and '_'
    Make sure that it starts from alphanumeric for better compatibility with yaml files
    """
    token = secrets.token_urlsafe(length)
    for _ in range(10):
        if not (token.startswith("-") or token.startswith("_")):
            break
        token = secrets.token_urlsafe(length)

    return token


def get_client_id(
    length: int = 30, allowed_chars: str = string.ascii_uppercase + string.digits
) -> str:
    """
    Create a random client id composed of 'length' upper case characters or digits
    """
    return "".join(secrets.choice(allowed_chars) for _ in range(length))


def get_secret_key(length: int = 50) -> str:
    """
    Create a random secret key
    """
    return get_random_string(length)


if __name__ == "__main__":
    print(get_client_id())
    print(get_secret_key())