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

import java.util.Optional;

public class OAuth2RawAccessTokenContainer {
   private final OAuth2AccessToken accessToken;
   private final RawOAuth2TokenWithHash rawAccessToken;
   private final Optional<RawOAuth2TokenWithHash> rawRefreshToken;

   public OAuth2RawAccessTokenContainer(OAuth2AccessToken accessToken, RawOAuth2TokenWithHash rawAccessToken, RawOAuth2TokenWithHash rawRefreshToken) {
      this(accessToken, rawAccessToken, Optional.of(rawRefreshToken));
   }

   public OAuth2RawAccessTokenContainer(OAuth2AccessToken accessToken, RawOAuth2TokenWithHash rawAccessToken) {
      this(accessToken, rawAccessToken, Optional.empty());
   }

   protected OAuth2RawAccessTokenContainer(
      OAuth2AccessToken accessToken, RawOAuth2TokenWithHash rawAccessToken, Optional<RawOAuth2TokenWithHash> rawRefreshToken
   ) {
      this.accessToken = accessToken;
      this.rawAccessToken = rawAccessToken;
      this.rawRefreshToken = rawRefreshToken;
   }

   public OAuth2AccessToken getAccessToken() {
      return this.accessToken;
   }

   public RawOAuth2TokenWithHash getRawAccessToken() {
      return this.rawAccessToken;
   }

   public Optional<RawOAuth2TokenWithHash> getRawRefreshToken() {
      return this.rawRefreshToken;
   }

   public String getRawAccessTokenString() {
      return this.rawAccessToken.toTokenString();
   }

   public Optional<String> getRawRefreshTokenString() {
      return this.rawRefreshToken.map(RawOAuth2TokenWithHash::toTokenString);
   }
}
