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

import com.airlock.iam.core.misc.util.locale.LocaleUtil;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.net.URI;
import java.util.UUID;

public final class WebOrigin {
   private final URI uri;

   public static WebOrigin webOrigin(URI uri) {
      return new WebOrigin(uri);
   }

   public String getOrigin() {
      if (this.uri.getScheme() != null && this.uri.getHost() != null && this.uri.isAbsolute()) {
         String scheme = this.uri.getScheme().toLowerCase(LocaleUtil.getForSystemStrings());
         if (!isHttp(scheme) && !isHttps(scheme)) {
            return UUID.randomUUID().toString();
         }

         StringBuilder sb = new StringBuilder();
         sb.append(scheme).append("://").append(this.uri.getHost().toLowerCase(LocaleUtil.getForSystemStrings()));
         if (isHttps(scheme) && this.uri.getPort() != -1 && this.uri.getPort() != 443) {
            sb.append(':').append(this.uri.getPort());
         } else if (isHttp(scheme) && this.uri.getPort() != -1 && this.uri.getPort() != 80) {
            sb.append(':').append(this.uri.getPort());
         }

         return sb.toString();
      } else {
         return UUID.randomUUID().toString();
      }
   }

   private static boolean isHttp(String scheme) {
      return "http".equals(scheme);
   }

   private static boolean isHttps(String scheme) {
      return "https".equals(scheme);
   }

   @SuppressFBWarnings(justification = "generated code")
   private WebOrigin(URI uri) {
      this.uri = uri;
   }
}
