/*
 * EscolherMotivoDialog.java
 *
 * Created on 13 de Maio de 2007, 22:16
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package siprp.medicina.processo;

import com.evolute.utils.data.IDObject;
import com.evolute.utils.data.MappableObject;
import com.evolute.utils.ui.CustomJDialog;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
import siprp.medicina.MedicinaConstants;

/**
 *
 * @author Frederico
 */
public class EscolherMotivoDialog extends CustomJDialog
	implements ActionListener, MedicinaConstants
{
	protected IDObject MOTIVOS[] = 
		new IDObject[]{
			new MappableObject( MOTIVO_ADMISSAO_INTEGER, MOTIVO_ADMISSAO_STR ), 
			new MappableObject( MOTIVO_PERIODICO_INTEGER, MOTIVO_PERIODICO_STR ),
			new MappableObject( MOTIVO_PERIODICO_INICIAL_INTEGER, MOTIVO_PERIODICO_INICIAL_STR ),
			new MappableObject( MOTIVO_OCASIONAL_INTEGER, MOTIVO_OCASIONAL_STR )
	};

	protected IDObject SUB_MOTIVOS[][] = 
		new IDObject[][]{
			{},
			{},
			{},
			{ new MappableObject( SUB_MOTIVO_APOS_DOENCA_INTEGER, SUB_MOTIVO_APOS_DOENCA_STR ), 
				new MappableObject( SUB_MOTIVO_APOS_ACIDENTE_INTEGER, SUB_MOTIVO_APOS_ACIDENTE_STR ),
				new MappableObject( SUB_MOTIVO_PEDIDO_TRABALHADOR_INTEGER, SUB_MOTIVO_PEDIDO_TRABALHADOR_STR ), 
				new MappableObject( SUB_MOTIVO_PEDIDO_SERVICO_INTEGER, SUB_MOTIVO_PEDIDO_SERVICO_STR ),
				new MappableObject( SUB_MOTIVO_MUDANCA_FUNCAO_INTEGER, SUB_MOTIVO_MUDANCA_FUNCAO_STR ),
				new MappableObject( SUB_MOTIVO_ALTERACAO_CONDICOES_INTEGER, SUB_MOTIVO_ALTERACAO_CONDICOES_STR ),
				new MappableObject( SUB_MOTIVO_OUTRO_INTEGER, SUB_MOTIVO_OUTRO_STR )
			}
	};
	
	protected AbstractButton motivoButtons[];
	protected HashMap<AbstractButton,JButton[]> subMotivoButtons;
	protected HashMap<AbstractButton,Integer> motivoButtonIDs;
	protected HashMap<JButton,Integer> subMotivoButtonIDs;
	protected JPanel motivoPanel;
	protected JPanel subMotivoPanel;
	
	protected Integer motivoTemp;
	protected Integer motivo;
	protected Integer subMotivo;
	
	/** Creates a new instance of EscolherMotivoDialog */
	public EscolherMotivoDialog( JFrame owner )
	{
		super( owner, true );
		setupComponents();
		
		if( owner != null )
		{
			centerSuper();
		}
		else
		{
			center();
		}
	}
	
	private void setupComponents()
	{
		setTitle( "Escolher Motivo" );
		setLayout( new FlowLayout( FlowLayout.LEFT ) );
		motivoButtons = new JToggleButton[ MOTIVOS.length ];
		subMotivoButtons = new HashMap<AbstractButton,JButton[]>();
		motivoButtonIDs = new HashMap<AbstractButton,Integer>();
		subMotivoButtonIDs = new HashMap<JButton,Integer>();
		for( int m = 0; m < MOTIVOS.length; m++ )
		{
			JToggleButton motivoButton = new JToggleButton( MOTIVOS[ m ].toString() );
			motivoButton.addActionListener( this );
			motivoButtonIDs.put( motivoButton, MOTIVOS[ m ].getID() );
			motivoButton.setPreferredSize( new Dimension( 250, 20 ) );
			motivoButtons[ m ] = motivoButton;
			if( SUB_MOTIVOS[ m ].length > 0 )
			{
				JButton subButtons[] = new JButton[ SUB_MOTIVOS[ m ].length ];
				for( int sm = 0; sm < SUB_MOTIVOS[ m ].length; sm++ )
				{
					JButton subButton = new JButton( SUB_MOTIVOS[ m ][ sm ].toString() );
					subMotivoButtonIDs.put( subButton, SUB_MOTIVOS[ m ][ sm ].getID() );
					subButtons[ sm ] = subButton;
					subButton.setPreferredSize( new Dimension( 300, 20 ) );
					subButton.addActionListener( this );
				}
				subMotivoButtons.put( motivoButton, subButtons );
			}
			else
			{
				subMotivoButtons.put( motivoButton, null );
			}
		}
		motivoPanel = new JPanel();
		subMotivoPanel = new JPanel();
		
		motivoPanel.setLayout( new GridLayout( motivoButtons.length + 1, 1 ) );
		for( int n = 0; n < motivoButtons.length; n++ )
		{
			motivoPanel.add( motivoButtons[ n ] );
		}
		
		add( motivoPanel );
		add( subMotivoPanel );
		
		pack();
	}

	public void actionPerformed(ActionEvent e)
	{
		AbstractButton source = ( AbstractButton ) e.getSource();
		if( motivoButtonIDs.containsKey( source ) )
		{
			motivoTemp = motivoButtonIDs.get( source );
		}
		else if( subMotivoButtonIDs.containsKey( source ) )
		{
			motivo = motivoTemp;
			subMotivo = subMotivoButtonIDs.get( source );
			close();
		}
		if( subMotivoButtons.containsKey( source ) )
		{
			JButton subButtons[] = subMotivoButtons.get( source );
			if( subButtons == null || subButtons.length == 0 )
			{
				motivo = motivoTemp;
				close();
			}
			else
			{
				subMotivoPanel.removeAll();
				subMotivoPanel.setLayout( new GridLayout( 0, 1 ) );
				for( int n = 0; n < subButtons.length; n++ )
				{
					subMotivoPanel.add( subButtons[ n ] );
				}
				pack();
			}
		}
	}
	
	protected void close()
	{
		SwingUtilities.invokeLater( new Runnable(){
			public void run()
			{
				setVisible( false );
				dispose();
			}
		} );
	}
	
	public Integer[] getMotivo()
	{
		return new Integer[]{ motivo, subMotivo };
	}
}
