/**
 * 
 */
package semantica;

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import parser.Parser;
import types.*;
import knowledge_member.*;

/**
 * @author   Giorgio Ravera
 */
public class AnalizzatoreSemantico
{
	private Parser parser = new Parser();
	private LinkedHashMap<String, KnowledgeElement> bidone = new LinkedHashMap<String,KnowledgeElement>();

	public AnalizzatoreSemantico()
	{
		KnowledgeElement k = new Condizioni("fame");
		k.addRelazion(Alimenti.class);
		k.addRelazion(Alimentari.class);
		bidone.put(k.getValue(), k);
		
	}
	
	public void start()
	{
		while(true)
		{
			Frase f = parser.nextFrase();
			if(f==null)
				return;
			else
			{
				System.out.println(f);
				elaboraFrase(f);
			}

		}
	}

	private void elaboraFrase(Frase f) throws SecurityException, NoSuchMethodException 
	{
		List<Symbol> ricerca=null;
		System.out.println("Elaborazione Semantica...");
		if(f.getOggetto().get(0).getType()==Type.pronome)
		{
			Pronome p = (Pronome)f.getSoggetto().get(0);
			if(p.isPassive())
			{
				ricerca = f.getSoggetto();
			}
			else
				ricerca=f.getOggetto();			
		}
		else
			ricerca=f.getOggetto();
		
		Iterator<Symbol> iter = ricerca.iterator();
		while(iter.hasNext())
		{
			System.out.print("nuovo evento: ");
			String s = iter.next().getValore();
			System.out.print(s);
			KnowledgeElement ke = bidone.get(s);
			if(ke==null)
				continue;
			
			Iterator<Class> rel = ke.getRelations();
			while(rel.hasNext())
			{
				Class c = rel.next();
				c.getMethod(new String("findable"), null);
			}
		}
	}
}
