package com.airlock.iam.oauth2.domain.model.client;

import com.airlock.iam.common.api.domain.model.locking.LockInfo;
import com.airlock.iam.common.domain.model.jwt.signature.JsonWebSignatureToken;
import com.airlock.iam.common.domain.model.jwt.signature.JwsVerifier;
import com.airlock.iam.core.domain.model.http.client.HttpClient;
import com.airlock.iam.oauth2.api.domain.model.AuthorizationServerId;
import com.airlock.iam.oauth2.api.domain.model.OAuth2ClientId;
import com.airlock.iam.oauth2.api.domain.model.OAuth2ClientSecret;
import com.airlock.iam.oauth2.api.domain.model.OAuth2Scope;
import com.airlock.iam.oauth2.domain.model.AllowedScopes;
import com.airlock.iam.oauth2.domain.model.PkceCodeChallengeMethod;
import com.airlock.iam.oauth2.domain.model.client.locales.LocalizedAttribute;
import com.airlock.iam.oauth2.domain.model.clientauthentication.OAuth2ClientCertificate;
import java.util.Optional;
import java.util.Set;

public interface OAuth2Client {
   OAuth2ClientId clientId();

   AuthorizationServerId authorizationServerId();

   Optional<OAuth2ClientSecret> clientSecret();

   Set<OAuth2ClientCertificate> clientCertificates();

   AllowedScopes allowedScopes();

   Set<OAuth2Scope> alwaysGrantedScopes();

   Optional<String> defaultRedirectUri();

   Set<String> redirectUris();

   Optional<String> backChannelLogoutUri();

   Optional<HttpClient> httpClient();

   Optional<LockInfo> lockInfo();

   LocalizedAttribute clientName();

   LocalizedAttribute additionalInfo();

   Optional<JwsVerifier> verifierFor(JsonWebSignatureToken var1);

   Optional<PkceCodeChallengeMethod> pkceCodeChallengeMethod();
}
