/*
    GNU LESSER GENERAL PUBLIC LICENSE
    Copyright (C) 2006 The Lobo Project

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

    Contact info: lobochief@users.sourceforge.net
 */
/*
 * Created on Jun 2, 2005
 */
package org.lobobrowser.util;

/**
 * @author J. H. S.
 */
public class Domains {
  /*
  private static final Collection<String> gTLDs;

  static {
    gTLDs = new HashSet<>();
    gTLDs.add(".com");
    gTLDs.add(".edu");
    gTLDs.add(".gov");
    gTLDs.add(".int");
    gTLDs.add(".mil");
    gTLDs.add(".net");
    gTLDs.add(".org");
    gTLDs.add(".biz");
    gTLDs.add(".info");
    gTLDs.add(".name");
    gTLDs.add(".pro");
    gTLDs.add(".aero");
    gTLDs.add(".coop");
    gTLDs.add(".museum");
    // TODO: New gTLDs?
  }*/

  /**
   *
   */
  private Domains() {
    super();
  }

  /** @deprecated use the method in DomainValidation.java */
  /*
  public static boolean isValidCookieDomain(String domain, final String hostName) {
    String plainDomain;
    if (!domain.startsWith(".")) {
      // Valid domains must start with a dot according to RFC 2109, but
      // RFC 2965 specifies a dot is prepended in the Set-Cookie2 header.
      plainDomain = domain;
      domain = "." + domain;
    } else {
      plainDomain = domain.substring(1);
    }
    final String plainDomainTL = plainDomain.toLowerCase();
    final String hostNameTL = hostName.toLowerCase();
    if (!hostNameTL.endsWith(plainDomainTL)) {
      return false;
    }
    final int lastDotIdx = domain.lastIndexOf('.');
    if (lastDotIdx == -1) {
      return false;
    }
    final String suffix = domain.substring(lastDotIdx).toLowerCase();
    if (gTLDs.contains(suffix)) {
      return Strings.countChars(domain, '.') >= 2;
    } else {
      return Strings.countChars(domain, '.') >= 3;
    }
  }*/

  /*
   *
   * @param host
   *          A host name in lower case.
   * @return
   /
  public static boolean endsWithGTLD(final String host) {
    final Iterator<String> i = gTLDs.iterator();
    while (i.hasNext()) {
      final String ending = i.next();
      if (host.endsWith(ending)) {
        return true;
      }
    }
    return false;
  }

  public static boolean isLikelyHostName(final String name) {
    final String nameTL = name.toLowerCase();
    if (nameTL.startsWith("www.")) {
      return true;
    }
    if (endsWithGTLD(name)) {
      return true;
    }
    final int lastDotIdx = nameTL.lastIndexOf('.');
    if (lastDotIdx == -1) {
      return false;
    }
    // Check for country code.
    return lastDotIdx == nameTL.length() - 3;
  }

  public static Collection<String> getPossibleDomains(final String hostName) {
    final Collection<String> domains = new LinkedList<>();
    domains.add(hostName);
    final int dotIdx = hostName.indexOf('.', 1);
    if (dotIdx == -1) {
      return domains;
    }
    final String testDomain = hostName.substring(dotIdx);
    if (!Domains.isValidCookieDomain(testDomain, hostName)) {
      return domains;
    }
    domains.addAll(Domains.getPossibleDomains(testDomain.substring(1)));
    return domains;
  }*/
}
