package tools;

import authoritymanager.client.DataPair;
import java.io.BufferedReader;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;

import com.wcohen.ss.*;

import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.bayes.NaiveBayes;
import weka.classifiers.functions.SMO;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;

public class TestModule {
	//private static String PATH = "/var/lib/tomcat6/webapps/ROOT/data/" ;
	public static Authority createAuthority(String PATH, String configurationFile, String baseFileName, int numberOfFiles) {
		long curTime;
		/*
		try {
			PrintWriter f = new PrintWriter(PATH + "test.txt");
			f.println("Test") ;
			f.flush() ;
			f.close() ;
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		*/
		File f ;
		
		curTime = System.currentTimeMillis();
		Configuration configuration = new Configuration(configurationFile);
		configuration.compile();
		Authority authority = new Authority(configuration);

		long initTime = System.currentTimeMillis();
		curTime = System.currentTimeMillis();		
		for (int i = 0; i < numberOfFiles; i++) {
			System.out.println(i + "/" + numberOfFiles);
			// authority.createFromFileXPATH("./dif/dif_fw" + formatNumber(i) + ".xml") ;
			authority.createFromFile(PATH + baseFileName + formatNumber(i) + ".xml");
			System.out.println(" " + 1.000 * (System.currentTimeMillis() - curTime) + "ms");
			curTime = System.currentTimeMillis();
		}
		System.out.println("Total time reading " + 1.000 * (System.currentTimeMillis() - initTime) + "ms");
		return authority ;
	}
	public static Authority createAuthority(String PATH, String configurationFile) {
		return new Authority(PATH + "/" + configurationFile) ;
	}
	public static void main(String[] argv) {
		Authority authority = new Authority("./data/DIF-movies.conf") ;
			//authority.toFile("cache.xml") ;
			//String dumpDir = Authority.PATH + "dump" + File.separatorChar + "luce" + File.separatorChar;
			//authority.dump(dumpDir) ;
			//Authority authority = new Authority("./data/EFG-persons.conf") ;
			//Authority authorityMovies = createAuthority("DIF-movies.conf", "./dif/dif_fw", 486) ;
			//Authority authority = new Authority("./data/EFG-corporate.conf") ;
			//authority.writeToFile("records.txt") ;
			System.out.println("Length: " + authority.getAllData().length) ;
			DuplicatesSet duplicatesSet = authority.getDuplicates() ;
			duplicatesSet.toFile("test-duplicates.txt") ;
			//Collection<Field> fields = authority.configuration.getField().values();
			//Collection<Field> fieldsMovies = authorityPersons.configuration.fields.values();

			//PrintWriter resultsMovies = new PrintWriter(new File("movies-duplicates.txt"));
			
	}

	public static void main2(String[] argv) {
		com.wcohen.ss.Jaro jaro = new com.wcohen.ss.Jaro();
		Jaccard jaccard = new Jaccard();
		JaroWinkler jarowinkler = new JaroWinkler();
		Levenstein levenstein = new Levenstein();
		ScaledLevenstein scaledLevenstein = new ScaledLevenstein();
		SoftTFIDF tfidfl = new SoftTFIDF(levenstein);
		SoftTFIDF tfidfj = new SoftTFIDF(jaro);
		TFIDF tfidf = new TFIDF();
		JaroWinklerDistance jarow = new JaroWinklerDistance();

		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		try {
			String a = "a", b = "b";
			while (!a.equals("quit")) {
				System.out.print("First string: ");
				a = in.readLine();
				System.out.print("Second string: ");
				b = in.readLine();
				System.out.println("jaro(" + a + ", " + b + ") = "
						+ jaro.score(a, b));
				System.out.println("jarow(" + a + ", " + b + ") = "
						+ jarow.getDistance(a, b));
				System.out.println("Explainscore: " + jaro.explainScore(a, b));
				System.out.println("jaro(" + a + ", " + b + ") = "
						+ jaro.score(a, b));
				System.out.println("jaccard(" + a + ", " + b + ") = "
						+ jaccard.score(a, b));
				System.out.println("jarowinkler(" + a + ", " + b + ") = "
						+ jarowinkler.score(a, b));
				System.out.println("levenstein(" + a + ", " + b + ") = "
						+ levenstein.score(a, b));
				System.out.println("scaledLevenstein(" + a + ", " + b + ") = "
						+ scaledLevenstein.score(a, b));
				System.out.println("tfidfl(" + a + ", " + b + ") = "
						+ tfidfl.score(a, b));
				System.out.println("tfidfj(" + a + ", " + b + ") = "
						+ tfidfj.score(a, b));
				System.out.println("tfidf(" + a + ", " + b + ") = "
						+ tfidf.score(a, b));
				System.out.println("year(" + a + ", " + b + ") = "
						+ CompareUtilities.YearDistance(a, b));
			}
			System.out.println("FINISHED!");
		} catch (IOException e) {
			System.out.println("Exception: " + e);
		}
	}

	private static String formatNumber(int num) {
		if (num < 10)
			return "000" + num;
		if (num < 100)
			return "00" + num;
		if (num < 1000)
			return "0" + num;
		return "" + num;
	}

}
