def METHOD_NAME(
    cls,
    db: Session,
    client_id_byte_length: int,
    client_secret_byte_length: int,
    *,
    scopes: list[str] | None = None,
    fides_key: str = None,
    user_id: str = None,
    encoding: str = "UTF-8",
    roles: list[str] | None = None,
    systems: list[str] | None = None,
) -> tuple["ClientDetail", str]:
    """Creates a ClientDetail and returns that along with the unhashed secret
    so it can be returned to the user on create
    """
    client_id = generate_secure_random_string(client_id_byte_length)
    secret = generate_secure_random_string(client_secret_byte_length)
    if not scopes:
        scopes = DEFAULT_SCOPES
    if not roles:
        roles = DEFAULT_ROLES
    if not systems:
        systems = DEFAULT_SYSTEMS
    salt = generate_salt()
    hashed_secret = hash_with_salt(
        secret.encode(encoding),
        salt.encode(encoding),
    )
    client = super().create(
        db,
        data={
            "id": client_id,
            "salt": salt,
            "hashed_secret": hashed_secret,
            "scopes": scopes,
            "fides_key": fides_key,
            "user_id": user_id,
            "roles": roles,
            "systems": systems,
        },
    )
    return client, secret  # type: ignore