import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import jsdai.SMachining_schema.EDirection;
import jsdai.SMachining_schema.SMachining_schema;
import jsdai.lang.A_double;
import jsdai.lang.SdaiException;
import jsdai.lang.SdaiModel;
import jsdai.lang.SdaiRepository;
import jsdai.lang.SdaiSession;

import Entidades_step.Direcao;

public class GeraDirection extends Direction_visual implements ActionListener{

	private static double X,Y,Z;
	private List<Direcao> listaDeDirecoes = new ArrayList<Direcao>();  
		
	Help janela_ajuda = new Help();
	
	private void init(){
		direcao_gerar_step.addActionListener(this);
		direcao_ok.addActionListener(this);
		direcao_adicionar.addActionListener(this);
		direcao_retornar.addActionListener(this);
		direcao_ajuda.addActionListener(this);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {

		Object source = e.getSource();
		if(direcao_gerar_step.equals(source)|direcao_ok.equals(source)){
						
			try {
				part21();
			} catch (SdaiException e1) {				
				e1.printStackTrace();
			}
			
			listaDeDirecoes.clear();
			direcao_txt_step.setEditable(false);	
			
		}
		if(direcao_adicionar.equals(source)){
		try{			
			X = Double.parseDouble(direcao_x.getText());
			Y = Double.parseDouble(direcao_y.getText());
			Z = Double.parseDouble(direcao_z.getText());
			
			Direcao direcao = new Direcao(X,Y,Z);
			listaDeDirecoes.add(direcao);	
			JOptionPane.showMessageDialog(null, "      Direção Adicionada!");
		}catch(NumberFormatException e1){
			JOptionPane.showMessageDialog(null,"Os argumentos devem ser números!");
		}			
		}
		if(direcao_retornar.equals(source)){
			this.setVisible(false);
		}
		if(direcao_ajuda.equals(source)){
			janela_ajuda.setVisible(true);
		}
		
	}
	private void part21() throws SdaiException{
		
		SdaiSession session = SdaiSession.openSession();
		session.startTransactionReadWriteAccess();
		SdaiRepository repository = session.createRepository("", null);
		repository.openRepository();
		SdaiModel model = repository.createSdaiModel("DemoSTEP_NC", SMachining_schema.class);
		model.startReadWriteAccess();
		direcao_txt_step.setText(null);
		direcao_txt_step.append("DATA;\n");	
		
		for(Direcao direcao : listaDeDirecoes){
			EDirection direction = (EDirection)model.createEntityInstance(EDirection.class);
			A_double d = direction.createDirection_ratios(null);
			d.addByIndex(1, direcao.getX());
			d.addByIndex(2, direcao.getY());
			d.addByIndex(3, direcao.getZ());
			direcao_txt_step.append(direction.toString()+"\n");
			
		}	
		direcao_txt_step.append("ENDSEC;\n" +
				"END-ISO-10303-21;\n");				
	}		
	public GeraDirection(){
		init();
	}

	public List<Direcao> getListaDeDirecoes() {
		return listaDeDirecoes;
	}

	public void setListaDeDirecoes(List<Direcao> listaDeDirecoes) {
		this.listaDeDirecoes = listaDeDirecoes;
	}	
}
