package com.airlock.iam.base.domain.service.uri;

import java.net.URI;
import java.net.URISyntaxException;

public final class UriEqualityCheck {
   public static boolean areUrisIdentical(URI a, URI b) {
      if (a == b) {
         return true;
      } else if (a != null && b != null) {
         URI actual = addDefaultPorts(a);
         URI target = addDefaultPorts(b);
         return actual.equals(target);
      } else {
         return false;
      }
   }

   private static URI addDefaultPorts(URI uri) {
      if (uri.getPort() == -1) {
         try {
            if ("http".equals(uri.getScheme())) {
               return new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), 80, uri.getPath(), uri.getQuery(), uri.getFragment());
            }

            if ("https".equals(uri.getScheme())) {
               return new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), 443, uri.getPath(), uri.getQuery(), uri.getFragment());
            }
         } catch (URISyntaxException e) {
            return uri;
         }
      }

      return uri;
   }

   private UriEqualityCheck() {
      throw new AssertionError();
   }
}
