package de.brightbyte.wikiword.eval;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import de.brightbyte.util.PersistenceException;
import de.brightbyte.wikiword.DatasetIdentifier;
import de.brightbyte.wikiword.eval.schema.DatabaseConceptSurveyBuilder;
import de.brightbyte.wikiword.model.ConceptDescription;
import de.brightbyte.wikiword.model.GlobalConcept;
import de.brightbyte.wikiword.model.GlobalConceptReference;

public class MergeSurvey extends SurveyApp<DatabaseConceptSurveyBuilder> {

	@Override
	protected void prepareApp() throws SQLException, PersistenceException {
		super.prepareApp();
	}

	@Override
	public void runCommand(List<String> params) throws Exception {
		String cmd = params.get(0);
		cmd = cmd.trim().toLowerCase();
		
		/*if (cmd.equals("random") || cmd.equals("rand")) {
			int n = Integer.parseInt(params.get(1));
			
			listRandom(n);
		}
		else*/ 
		/*if (cmd.equals("survey") || cmd.equals("survey")) {
			String batch = params.get(1);
			survey(batch);
		}
		else*/ if (cmd.equals("show")) {
			int top = params.size()>1 ? Integer.parseInt(params.get(1)) : 0; 
			GlobalConcept c = (GlobalConcept)conceptStore.getRandomConcept(top);
			show(c);
		}
		/*else if (cmd.equals("evaluate") || cmd.equals("eval")) {
			String batch = params.get(1);
			String m = params.get(2).toUpperCase();
			if (m.equals("AND") || m.equals("OR")) m+= "_EXPLICIT";
			Integer cutoff = new Integer(params.get(3));
			boolean includeUnknown = params.size()<=4 ? true : Boolean.parseBoolean(params.get(4));
			
			evaluate(batch, CutoffMode.valueOf(m), cutoff, includeUnknown);
		}
		else if (cmd.equals("compare-cutoff") || cmd.equals("compcut")) {
			String batch = params.get(1);
			
			compareCutoff(batch);
		}
		else if (cmd.equals("delete") || cmd.equals("del")) {
			String batch = params.get(1);
			delete(batch);
		}*/
		else if (cmd.equals("statistics") || cmd.equals("stats")) {
			dumpStats();
		}
		else {
			super.runCommand(params);
		}
	}
	
	public void show(GlobalConcept c) throws PersistenceException {
		echo("* "+c.getName());
		echo("------------------------------------------------");
		Map<String, ConceptDescription> descriptions = c.getDescriptions();
		for (ConceptDescription d: descriptions.values()) {
			echo("- "+d.getCorpus()+": "+d.getDefinition()+" -- "+d.getResource());
		}
		echo("------------------------------------------------");
		GlobalConceptReference[] similar = c.getSimilar();
		for (GlobalConceptReference s: similar) {
			echo("- "+s.getName());
		}
		echo("------------------------------------------------");
	}
	
	public static void main(String[] argv) throws Exception {
		MergeSurvey ms = new MergeSurvey();
		ms.launch(argv);
	}

	@Override
	protected DatabaseConceptSurveyBuilder createStore(DatasetIdentifier ds, DataSource db) throws PersistenceException {
		try {
			return new DatabaseConceptSurveyBuilder(getDataset(), db, tweaks);
		} catch (SQLException e) {
			throw new PersistenceException(e);
		}
	}

}
