package siprp.higiene.legislacoes;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import com.evolute.utils.tracker.TrackableWindow;

import static com.evolute.utils.strings.UnicodeLatin1Map.*;

public class GestaoLegislacoesWindow extends JFrame implements TrackableWindow
{

	private static final long serialVersionUID = 1L;
	
	public static final String TITLE = "Gest" + atilde + "o de Legisla" + ccedil + otilde + "es";
//	
//	private static final Dimension SIZE = new Dimension( 800, 400 );
//	
//	private DefaultMutableTreeNode root = new DefaultMutableTreeNode( "Legisla" + ccedil + atilde + "o em Higiene e Seguran" + ccedil + "a no Trabalho" );
//
//	private final DefaultTreeModel model = new DefaultTreeModel( root );
//
//	private final JTree tree = new JTree( model );
//
//	private final JScrollPane scroll = new JScrollPane( tree );
//	
//	private final JButton buttonCriar = new JButton("Criar");
//	
//	private final JButton buttonRemover = new JButton("Remover");
//	
//	private final JButton buttonGuardar = new JButton("Guardar");
//	
//	private final JButton buttonCancelar = new JButton("Cancelar");
//	
//	private final JTextArea text = new JTextArea();
//	
//	private final JPanel panelTree = new JPanel();
//	
//	private final JPanel panelText = new JPanel();
//	
//	private final PlanoActuacaoDAO provider = new PlanoActuacaoDAO();
//	
//	private Legislacao newLegislacao = null;
//	
//	public static void main( String[] args )
//	{
//		GestaoLegislacoesWindow window = new GestaoLegislacoesWindow();
//		window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
//		window.setVisible( true );
//	}
	
	public GestaoLegislacoesWindow()
	{
//		this.setTitle( TITLE );
//		this.setSize( SIZE );
//		startupComponents();
//		startupLayout();
//		startupListeners();
//		placeComponents();
//		refresh();
	}
	
//	private void startupComponents()
//	{
//		panelText.setBorder( BorderFactory.createEtchedBorder() );
//		buttonRemover.setEnabled( false );
//		buttonGuardar.setEnabled( false );
//		buttonCancelar.setEnabled( false );
//		text.setEnabled( false );
//		tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
//		tree.setRootVisible( true );
//	}
//	
//	private void startupLayout()
//	{
//		startupPanelTextLayout();
//		startupPanelTreeLayout();
//		this.getContentPane().setLayout( new GridLayout(1,0,5,5) );
//	}
//	
//	private void startupPanelTextLayout()
//	{
//		TableLayout layout = new TableLayout(
//				new double[]{ TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL },
//				new double[]{ TableLayout.FILL, TableLayout.MINIMUM }
//				);
//		layout.setHGap( 5 );
//		layout.setVGap( 5 );
//		panelText.setLayout( layout );
//	}
//	
//	private void startupPanelTreeLayout()
//	{
//		TableLayout layout = new TableLayout(
//				new double[]{ TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL },
//				new double[]{ TableLayout.FILL, TableLayout.MINIMUM }
//				);
//		layout.setHGap( 5 );
//		layout.setVGap( 5 );
//		panelTree.setLayout( layout );
//	}
//	
//	private void startupListeners()
//	{
//		buttonCriar.addActionListener( new ActionListener()
//		{
//			@Override
//			public void actionPerformed( ActionEvent e )
//			{
//				criarLegislacao( );
//			}
//		} );
//		buttonRemover.addActionListener( new ActionListener()
//		{
//			@Override
//			public void actionPerformed( ActionEvent e )
//			{
//				removerLegislacao();
//			}
//		} );
//		buttonGuardar.addActionListener( new ActionListener()
//		{
//			@Override
//			public void actionPerformed( ActionEvent e )
//			{
//				guardarLegislacao();
//			}
//		} );
//		buttonCancelar.addActionListener( new ActionListener()
//		{
//			@Override
//			public void actionPerformed( ActionEvent e )
//			{
//				cancelarEdicao();
//			}
//		} );
//		tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener()
//		{
//			@Override
//			public void valueChanged( TreeSelectionEvent e )
//			{
//				TreePath path = tree.getSelectionPath();
//				Legislacao legislacao = getSelectedLegislacao();
//				if( path != null )
//				{
//					buttonRemover.setEnabled( !root.equals( path.getLastPathComponent() ) );
//					text.setEnabled( !root.equals( path.getLastPathComponent() ) );
//					text.setText( legislacao == null ? "" : legislacao.getDescription() );
//				}
//				else
//				{
//					text.setEnabled( false );
//					buttonRemover.setEnabled( false );
//					text.setText( "" );
//				}
//			}
//		} );
//		text.addCaretListener( new CaretListener()
//		{
//			@Override
//			public void caretUpdate( CaretEvent e )
//			{
//				if( text.getText().length() > 0)
//				{
//					Legislacao legislacao = null;
//					if( newLegislacao != null )
//					{
//						legislacao = newLegislacao;
//					}
//					else
//					{
//						legislacao = getSelectedLegislacao();
//					}
//					boolean changed = legislacao == null ? false : !legislacao.getDescription().equals( text.getText() );
//					buttonGuardar.setEnabled( changed );
//					text.setBorder( changed ? BorderFactory.createLineBorder( Color.RED, 2 ) : BorderFactory.createEtchedBorder() );
//				}
//				else
//				{
//					buttonGuardar.setEnabled( false );
//					text.setBorder( BorderFactory.createEtchedBorder() );
//				}
//			}
//		} );
//	}
//	
//	private void placeComponents()
//	{
//		panelTree.add( scroll, new TableLayoutConstraints( 0, 0, 2, 0 ) );
//		panelTree.add( buttonCriar, new TableLayoutConstraints( 0, 1 ) );
//		panelTree.add( buttonRemover, new TableLayoutConstraints( 1, 1 ) );
//		
//		panelText.add( text, new TableLayoutConstraints( 0, 0, 2, 0 ) );
//		panelText.add( buttonGuardar, new TableLayoutConstraints( 0, 1 ) );
//		panelText.add( buttonCancelar, new TableLayoutConstraints( 1, 1 ) );
//		
//		this.getContentPane().add( panelTree );
//		this.getContentPane().add( panelText );
//	}
//	
//	private void criarLegislacao()
//	{
//		text.setText( "" );
//		Legislacao selected = getSelectedLegislacao();
//		if( selected != null )
//		{
//			newLegislacao = provider.createNovaLegislacao( selected );
//		}
//		else
//		{
//			newLegislacao = provider.createNovaLegislacao( getSelectedLegislacao() );
//		}
//		prepareEditar( false );
//		textInputOnly( true );
//	}
//	
//	private void prepareEditar( boolean editar )
//	{
//		buttonGuardar.setText( editar ? "Editar" : "Criar" );
//		buttonCancelar.setText( editar ? "Reverter" : "Cancelar" );
//	}
//	
//	private void textInputOnly( boolean doTextInput )
//	{
//		text.setEnabled( doTextInput );
//		buttonCancelar.setEnabled( doTextInput );
//		buttonCriar.setEnabled( !doTextInput );
//		tree.setEnabled( !doTextInput );
//		text.setBorder( doTextInput ? BorderFactory.createLineBorder( Color.RED, 2 ) : BorderFactory.createEtchedBorder());
//		if( doTextInput ){
//			text.setCaretPosition( 0 );
//			text.requestFocus();
//			buttonRemover.setEnabled( false );
//		}
//	}
//	
//	private void guardarLegislacao()
//	{
//		TreePath path = tree.getSelectionPath();
//		if( newLegislacao != null )
//		{
//			newLegislacao.setDescription( text.getText() );
//			provider.commit();
//			newLegislacao = null;
//			prepareEditar( true );
//			textInputOnly( false );
//			refresh();
//		}
//		else if( path != null )
//		{
//			Legislacao legislacao = getSelectedLegislacao();
//			legislacao.setDescription( text.getText() );
//			provider.commit();
//			prepareEditar( true );
//			textInputOnly( false );
//			refresh();
//		}
//	}
//	
//	private void cancelarEdicao()
//	{
//		TreePath path = tree.getSelectionPath();
//		if( newLegislacao != null )
//		{
//			newLegislacao = null;
//			prepareEditar( true );
//			textInputOnly( false );
//			refresh();
//			tree.setSelectionPath( path );
//		}
//		else if( path != null )
//		{
//			prepareEditar( true );
//			textInputOnly( false );
//			refresh();
//			tree.setSelectionPath( path );
//		}
//	}
//	
//	private Legislacao getSelectedLegislacao()
//	{
//		Legislacao result = null;
//		TreePath path = tree.getSelectionPath();
//		if( path != null )
//		{
//			Object o = ( (DefaultMutableTreeNode) path.getLastPathComponent() ).getUserObject();
//			if( o instanceof Legislacao )
//			{
//				result = (Legislacao) o;
//			}
//		}
//		return result;
//	}
//	
//	private void removerLegislacao()
//	{
//		Legislacao legislacao = getSelectedLegislacao();
//		if( legislacao != null )
//		{
//			provider.delete( legislacao );
//		}
//		refresh();
//	}
//	
	@Override
	public void refresh()
	{
//		clearTree();
//		fillTree();
	}
//	
//	private void clearTree()
//	{
//		root.removeAllChildren();
//		refreshTree();
//	}
//
//	private void fillTree()
//	{
//		List<Legislacao> legislacoes = provider.getAllLegislacoes( null );
//		for( Legislacao legislacao : legislacoes )
//		{
//			DefaultMutableTreeNode node = new DefaultMutableTreeNode( legislacao );
//			fillWithChildren( node, legislacao );
//			root.add( node );
//		}
//		refreshTree();
//	}
//	
//	private void fillWithChildren( DefaultMutableTreeNode node, Legislacao legislacao )
//	{
//		if( legislacao != null )
//		{
//			for( Legislacao child : legislacao.getChildrenArray() )
//			{
//				DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child);
//				fillWithChildren( childNode, child );
//				node.add( childNode );
//			}
//		}
//	}
//	
//	private void refreshTree()
//	{
//		model.nodeStructureChanged( root );
//	}

	@Override
	public boolean closeIfPossible()
	{
		close();
		return true;
	}
	
	private void close()
	{
		SwingUtilities.invokeLater( new Runnable() {
			public void run()
			{
				setVisible( false );
				dispose();
			}
		} );
	}

	@Override
	public void open()
	{
		setVisible( true );
	}

}
