
package project;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.DisplayMode;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Map;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.text.Document;


public class GuiInterface  extends JFrame implements ActionListener,ListSelectionListener,TableModelListener {
	
	Repository repos=new Repository();
    int index=0;
    ParticipantsForm participantPanel;
    RelationshipsForm  relationshipPanel;
    Participant p;
    Relationships r;
    Interests interest;
    JTable table;
    FormConfiguration formConfigurator1;
    FormConfiguration formConfigurator2;
    FormConfiguration formConfigurator3;
    GenericForm3 form1;
    Map<String,GenericForm3> forms;
	
	public GuiInterface(String title){
		super(title);
		setLayout(new BorderLayout());
		setJMenuBar(UIFactory.createMenuBar());
        //Set up the content pane.
        Container c= getContentPane();
       // c.setBackground(Color.gray);
        JPanel contentPanel=new JPanel();
        contentPanel.setBorder(BorderFactory.createEmptyBorder(7,5,7,5));
      //  contentPanel.getInsets().set(10, 10, 10, 10);
        contentPanel.setBackground(new Color(186,219,241));
        contentPanel.setLayout(new BorderLayout(4,4));
        c.add(contentPanel,BorderLayout.CENTER);
        
        createTable(contentPanel);
      
	}
	

	
public void   createTable(Container c) {
		

		c.add(UIFactory.createTitlePanel(), BorderLayout.NORTH);
		c.add(UIFactory.createNavigationPanel(this), BorderLayout.WEST);
		
		TableView view=new TableView(repos.getParticipants(), repos.getParticipantsAttributes());
		String[] headers=repos.getParticipantsAttributes();
		table=view.renderTable();
		table.getModel().addTableModelListener(this);
		ListSelectionModel listSelectionModel=table.getSelectionModel();
		listSelectionModel.addListSelectionListener(this);
		JScrollPane sPane=new JScrollPane(table);
		table.setFillsViewportHeight(true);
		table.setPreferredScrollableViewportSize(new Dimension(750,250));
		
		
		
		JPanel contentPanel=new JPanel();
		contentPanel.setBackground(new Color(186,219,241));
		c.add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
		
		p=repos.getParticipant(1);
		r=repos.getRelationship(1);
		interest=repos.getInterests(1);
		
		FormFactory formFactory=new FormFactory(repos);
		forms=formFactory.getForms();
		GenericForm3 tableForm=forms.get("Participant");
		tableForm.setTable(table);
		JTabbedPane tabbedPane=UIFactory.createTabbedFormPanel1(forms);
		contentPanel.add(tabbedPane);
		contentPanel.add(sPane);
		
		
		JPanel footerPanel=new JPanel();
		footerPanel.setBackground(Color.blue);
		footerPanel.setPreferredSize(new Dimension(300,50));
		footerPanel.setBackground(new Color(64,128,255));
		JButton next=new JButton("NEXT");
		next.addActionListener(this);
		next.setActionCommand("next");
		JButton prev=new JButton("PREV");
		prev.setActionCommand("prev");
		prev.addActionListener(this);
		footerPanel.add(next);
		footerPanel.add(prev);
		
		
		c.add(footerPanel,BorderLayout.SOUTH);
		
		try {
			repos.TestReflection();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	

	@Override
	public void actionPerformed(ActionEvent e) {
		int oldIndex;
		oldIndex=index;
		index=(e.getActionCommand().equals("next")) ? (index+1):(index-1);
		r=repos.getRelationship(index);
		p=repos.getParticipant(index);
		interest=repos.getInterests(index);
		if (interest==null) index=oldIndex;
		forms.get("Participant").bind(p);
		forms.get("Relationship").bind(r);
		forms.get("Interests").bind(interest);
		table.setRowSelectionInterval(index-1, index-1);
		if (e.getActionCommand().equals("AddParticipant")){
			
			forms.get("Participant").bind(null);
		}
		
	}

	@Override
	public void valueChanged(ListSelectionEvent e) {
		System.out.println(table.getSelectedRow()+1);
		int row=table.getSelectedRow();
		if (row!=-1){
			p=repos.getParticipant(row+1);
			int id=p.getId();
			index=id;
			//participantPanel.populateForm(p);
			//relationshipPanel.populateForm(repos.getRelationship(table.getSelectedRow()+1));
			r=repos.getRelationship(id);
			p=repos.getParticipant(id);
			interest=repos.getInterests(id);
			forms.get("Participant").bind(p);
			forms.get("Relationship").bind(r);
			forms.get("Interests").bind(interest);
		}
		
	}



	
	@Override
	public void tableChanged(TableModelEvent e) {
		
		System.out.println("Table Changed");
		System.out.println(e.getFirstRow());
		System.out.println("col="+e.getColumn());
		
		
		
	}
	
	
	

	
	

}
