package org.gcube.dataanalysis.dataminerpoolmanager;

import java.net.ProxySelector;
import java.util.UUID;

***REMOVED***
***REMOVED***
import org.gcube.dataanalysis.dataminer.poolmanager.datamodel.AlgorithmSet;
import org.gcube.dataanalysis.dataminer.poolmanager.datamodel.Dependency;
***REMOVED***
import org.gcube.dataanalysis.dataminer.poolmanager.util.PropertiesBasedProxySelector;

public class DataminerPoolManagerTest ***REMOVED***

  /*
  private static Map<String, Domain> domains = new HashMap<>();
  private static Map<String, Cluster> clusters = new HashMap<>();
  
  private static Dependency createDependency(String depName) ***REMOVED***
    String[] parts = depName.split(":");
    Dependency out = new Dependency();
    if(parts.length>1) ***REMOVED***
      out.setType(parts[0]);
      out.setName(parts[1]);
    ***REMOVED*** else ***REMOVED***
      out.setType("os");
      out.setName(depName);
    ***REMOVED***
    return out;
  ***REMOVED***
  
  private static Algorithm createAlgorithm(String name, String ... deps) ***REMOVED***
    Algorithm a = new Algorithm();
    a.setName(name);
    for(String dep:deps) ***REMOVED***
      a.addDependency(createDependency(dep));
    ***REMOVED***
    return a;
  ***REMOVED***
  
  private static AlgorithmSet createAlgorithmSet(String name, Algorithm ... algs) ***REMOVED***
    AlgorithmSet out = new AlgorithmSet();
    out.setName(name);
    for(Algorithm a:algs) ***REMOVED***
      out.addAlgorithm(a);
    ***REMOVED***
    return out;
  ***REMOVED***
  
  private static Domain getDomain(String name) ***REMOVED***
    if(domains.get(name)==null) ***REMOVED***
      Domain d = new Domain();
      d.setName(name);
      domains.put(name, d);
      return d;
    ***REMOVED*** else ***REMOVED***
      return domains.get(name);
    ***REMOVED***
  ***REMOVED***
  
  private static Host createHost(String hostname, String domainName) ***REMOVED***
    Host out = new Host();
    out.setName(hostname);
    Domain d = getDomain(domainName);
    out.setDomain(d);
    return out;
  ***REMOVED***
  
  private static Cluster getCluster(String name) ***REMOVED***
    if(clusters.get(name)==null) ***REMOVED***
      Cluster d = new Cluster();
      d.setName(name);
      clusters.put(name, d);
      return d;
    ***REMOVED*** else ***REMOVED***
      return clusters.get(name);
    ***REMOVED***
  ***REMOVED***  
  
  private static Collection<Dependency> extractDependencies() ***REMOVED***
    Collection<Dependency> out = new TreeSet<>(new DependencyComparator());
    for(Cluster c:clusters.values()) ***REMOVED***
      for(AlgorithmSet as:c.getAlgorithmSets()) ***REMOVED***
        for(Algorithm a:as.getAlgorithms()) ***REMOVED***
          for(Dependency d:a.getDependencies()) ***REMOVED***
            out.add(d);
          ***REMOVED***
        ***REMOVED***
      ***REMOVED***
    ***REMOVED***
    return out;
  ***REMOVED***

  private static Collection<Algorithm> extractAlgorithms() ***REMOVED***
    Collection<Algorithm> out = new TreeSet<>(new AlgorithmComparator());
    for(Cluster c:clusters.values()) ***REMOVED***
      for(AlgorithmSet as:c.getAlgorithmSets()) ***REMOVED***
        for(Algorithm a:as.getAlgorithms()) ***REMOVED***
          out.add(a);
        ***REMOVED***
      ***REMOVED***
    ***REMOVED***
    return out;
  ***REMOVED***

  static ***REMOVED***
    
    Algorithm ewe = createAlgorithm("ewe", "mono", "latex", "cran:some_R_package", "custom:some_git_package");
    Algorithm ensemble = createAlgorithm("ensemble", "python");
    Algorithm voodoo = createAlgorithm("voodoo", "os:latex", "custom:blah");
    
    AlgorithmSet as1 = createAlgorithmSet("as1-fishes", ewe);
    AlgorithmSet as2 = createAlgorithmSet("as2-stat", ensemble);
    AlgorithmSet as3 = createAlgorithmSet("as3-blackmagic", voodoo, ewe);

    Cluster cluster1 = getCluster("cluster-1");
    cluster1.addHost(createHost("host1", "domain1"));
    cluster1.addHost(createHost("host2", "domain1"));
    cluster1.addHost(createHost("host3", "domain1"));
    cluster1.addHost(createHost("host1", "domain2"));
    cluster1.addHost(createHost("host2", "domain2"));

    Cluster cluster2 = getCluster("cluster-2");
    cluster2.addHost(createHost("host4", "domain1"));
    cluster2.addHost(createHost("host5", "domain1"));
    cluster2.addHost(createHost("host6", "domain1"));
    cluster2.addHost(createHost("host3", "domain2"));
    cluster2.addHost(createHost("host4", "domain2"));
    cluster2.addHost(createHost("host5", "domain2"));
    
    cluster1.addAlgorithmSet(as1);
    cluster1.addAlgorithmSet(as2);

    cluster2.addAlgorithmSet(as1);
    cluster2.addAlgorithmSet(as3);
    
  ***REMOVED***
  */
  
  public static void main(String[] args) throws Exception ***REMOVED***
    /*
    AnsibleBridge ab = new AnsibleBridge();
    ab.printInventoryByDomainAndSets(clusters.values());
    System.out.println("-----------");
    ab.printInventoryBySets(clusters.values());

    AnsibleWorker worker = ab.createWorker();
    
    for(Algorithm a:extractAlgorithms()) ***REMOVED***
      for(Role r:ab.generateRoles(a)) ***REMOVED***
        worker.addRole(r);
      ***REMOVED***
    ***REMOVED***

    for(Dependency d:extractDependencies()) ***REMOVED***
      for(Role r:ab.generateRoles(d)) ***REMOVED***
        worker.addRole(r);
      ***REMOVED***
    ***REMOVED***
    */
    
    ScopeProvider.instance.set("/gcube/devNext/NextNext");
    
    ProxySelector.setDefault(new PropertiesBasedProxySelector("/home/ngalante/.proxy-settings"));
***REMOVED***    
***REMOVED***    ***REMOVED*** create the algorithm (download it, etc etc)
***REMOVED***    Algorithm algorithm = new Algorithm();
***REMOVED***    algorithm.setName("ichtyop");
***REMOVED***    algorithm.setClazz("org.gcube...");
***REMOVED***    algorithm.setDescription("some description");
***REMOVED***    
***REMOVED***    Dependency d = new Dependency();
***REMOVED***    d.setName("libpng");
***REMOVED***    d.setType("os");
***REMOVED***    algorithm.addDependency(d);
***REMOVED***
***REMOVED***    d = new Dependency();
***REMOVED***    d.setName("some-r-package");
***REMOVED***    d.setType("cran");
***REMOVED***    algorithm.addDependency(d);
***REMOVED***
***REMOVED***    d = new Dependency();
***REMOVED***    d.setName("some-other-r-package");
***REMOVED***    d.setType("cran");
***REMOVED***    algorithm.addDependency(d);
***REMOVED***
***REMOVED***    d = new Dependency();
***REMOVED***    d.setName("voodoo");
***REMOVED***    d.setType("custom");
***REMOVED***    algorithm.addDependency(d);
***REMOVED***
***REMOVED***    ***REMOVED*** create the algorithm (download it, etc etc)
***REMOVED***    Algorithm ewe = new Algorithm();
***REMOVED***    ewe.setName("ewe");
***REMOVED***
***REMOVED***    d = new Dependency();
***REMOVED***    d.setName("voodoo");
***REMOVED***    d.setType("custom");
***REMOVED***    ewe.addDependency(d);

    AlgorithmSet algorithms = new AlgorithmSet();
    algorithms.setName("dummy-set");
    

***REMOVED***    algorithms.addAlgorithm(algorithm);
***REMOVED***    algorithms.addAlgorithm(ewe);

    Algorithm ensemble = new Algorithm();
    ensemble.setName("ensemble");
    ensemble.setCategory("ICHTHYOP_MODEL");
    ensemble.setAlgorithmType("transducerers");
    ensemble.setPackageURL("http:***REMOVED***data.d4science.org/R0FqV2lNOW1jMkxuUEIrWXY4aUhvSENHSmVMQks4NjdHbWJQNStIS0N6Yz0");
    ensemble.setClazz("org.gcube.dataanalysis.executor.rscripts.Ichthyopmodelonebyone");
    ensemble.setSkipJava("N");
    ensemble.setDescription("test");
    
    Dependency d = new Dependency();
    d.setName("libpng3");
    d.setType("os");
    ensemble.addDependency(d);
    algorithms.addAlgorithm(ensemble);
    
    ***REMOVED***new DataminerPoolManager().addAlgorithmsToVRE(algorithms, "/gcube/devNext/NextNext", "test"+UUID.randomUUID(), false);

  ***REMOVED***

***REMOVED***
