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 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 TestPadFramev1  extends JFrame implements ActionListener,ListSelectionListener,TableModelListener {
	
	Repository repos=new Repository();
    int index=1;
    ParticipantsForm participantPanel;
    RelationshipsForm  relationshipPanel;
    Participant p;
    Relationships r;
    JTable table;
    FormConfiguration formConfigurator1,formConfigurator2;
    GenericForm3 formPanel;
	
	public TestPadFramev1(String title){
		super(title);
		setLayout(new BorderLayout());
		setJMenuBar(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);
        
        
        
        /* Test the GUI */
      // createTestPanel1(contentPanel);
       // createGUIForForms( c);
        //createTabsForForms( c);
      createTable(contentPanel);
      
	}
	
	private void createGUI1(Container c){
		
		final JTextArea textArea=new JTextArea();
        JButton button=new JButton("Button");
        TestPanel testPanel=new TestPanel();
        
        //c.add(textArea, BorderLayout.CENTER);
       // c.add(button,BorderLayout.SOUTH);
        c.add(testPanel,BorderLayout.CENTER);
        
        button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				//textArea.append("Hello World \n");
				
			}
		});
	}
	
	private void createGUIForForms(Container c){
		
        RelationshipsForm  relationshipPanel=new RelationshipsForm();
       
        
        JScrollPane scrollPane=new JScrollPane(relationshipPanel);
        //c.add(button,BorderLayout.SOUTH);
        c.add(scrollPane,BorderLayout.CENTER);
	}
	
	private void createTabsForForms(Container c){
		
		 
		relationshipPanel=new RelationshipsForm();
		participantPanel=new ParticipantsForm(repos.getParticipant(index));
		//ParticipantsForm participantPanel=new ParticipantsForm();
        JTabbedPane tabbedPane=new JTabbedPane();
       
        
        JScrollPane scrollPane1=new JScrollPane(relationshipPanel);
        JScrollPane scrollPane2=new JScrollPane(participantPanel);
        tabbedPane.addTab("Participant", scrollPane2);
        tabbedPane.addTab("RelationShip", scrollPane1);
        tabbedPane.addTab("Interests", new JPanel());
        
        
        //c.add(button,BorderLayout.SOUTH);
        c.add(tabbedPane,BorderLayout.CENTER);
        
        JPanel headerPanel=new BorderPanel();
		headerPanel.setPreferredSize(new Dimension(200,30));
		headerPanel.setBackground(Color.white);
		
		JButton nextButton=new JButton("Next");
		nextButton.addActionListener(this);
		JButton previousButton=new JButton("Previous");
		previousButton.addActionListener(this);
		headerPanel.add(nextButton);
		headerPanel.add(previousButton);
		c.add(headerPanel, BorderLayout.NORTH);
	}
	
	public void   createTable(Container c) {
		
		
		
		JPanel  titlePanel=new JPanel();
		titlePanel.setPreferredSize(new Dimension(200,50));
		titlePanel.setBackground(Color.LIGHT_GRAY);
		titlePanel.setBorder(BorderFactory.createLineBorder(Color.black,1));
		titlePanel.setLayout(new BoxLayout(titlePanel, BoxLayout.LINE_AXIS));
		titlePanel.add(Box.createRigidArea(new Dimension(20,0)));
		//titlePanel.add(Box.createRigidArea(new Dimension(0,5)));
		JLabel label=new JLabel("Please Enter Search Text");
		titlePanel.add(label);
		titlePanel.add(Box.createRigidArea(new Dimension(5,0)));
		
	final	JTextField searchField=new JTextField(200);
		searchField.setPreferredSize(new Dimension(100,20));
		searchField.setMaximumSize(new Dimension(100,20));
		titlePanel.add(searchField);
		
		titlePanel.add(Box.createRigidArea(new Dimension(20,0)));
		JButton searchButton=new JButton("Search");
		titlePanel.add(searchButton);
		titlePanel.add(Box.createRigidArea(new Dimension(20,0)));
		
		c.add(titlePanel, BorderLayout.NORTH);
		
		
		//c.add(title, BorderLayout.NORTH);
	
		Border emptyBorder=BorderFactory.createEmptyBorder(2, 2, 2, 2);
		Border lineBorder=BorderFactory.createLineBorder(Color.white, 1, true);
		Border etchBorder=BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
		Border compoundBorder=BorderFactory.createCompoundBorder( emptyBorder,lineBorder);
		
		JPanel  navPanel=new JPanel();
		navPanel.setPreferredSize(new Dimension(200,200));
		navPanel.setBorder(BorderFactory.createLineBorder(Color.black,1));
		Dimension dim=new Dimension(10,200);
		JButton uploadButton=new JButton("Batch Upload");
		JButton viewAllButton=new JButton("Show All Pariticipants");
		//viewAllButton.setBorder(emptyBorder);
		JButton viewTop5Button=new JButton("Show Top5 Pariticipants");
		JButton viewTop10Button=new JButton("Show Top10 Pariticipants");
		JButton viewBottom5Button=new JButton("Show Bottom5 Pariticipants");
		JButton viewBottom10Button=new JButton("Show Bottom10 Pariticipants");
		JButton addParticipantButton=new JButton("ADD New Participant");
		addParticipantButton.setActionCommand("add");
		JButton removeParticipantButton=new JButton("Remove Participant");
		removeParticipantButton.setActionCommand("remove");
		
		
		navPanel.setLayout(new BoxLayout(navPanel, BoxLayout.Y_AXIS));
		navPanel.add(Box.createRigidArea(new Dimension(20,0)));
		navPanel.add(Box.createRigidArea(new Dimension(0,5)));
		navPanel.add(uploadButton);
		navPanel.add(Box.createRigidArea(new Dimension(0,5)));
		navPanel.add(viewAllButton);
		navPanel.add(Box.createRigidArea(new Dimension(0,5)));
		navPanel.add(viewTop5Button);
		navPanel.add(Box.createRigidArea(new Dimension(0,5)));
		navPanel.add(viewTop10Button);
		navPanel.add(Box.createRigidArea(new Dimension(0,5)));
		navPanel.add(viewBottom5Button);
		navPanel.add(Box.createRigidArea(new Dimension(0,5)));
		navPanel.add(viewBottom10Button);
		navPanel.add(Box.createRigidArea(new Dimension(0,5)));
		navPanel.add(addParticipantButton);
		addParticipantButton.addActionListener(this);
		navPanel.add(Box.createRigidArea(new Dimension(0,5)));
		navPanel.add(removeParticipantButton);
		removeParticipantButton.addActionListener(this);
		
		navPanel.setBackground(new Color(225,232,237));
		c.add(navPanel, 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,200));
	//	table.setBackground(Color.YELLOW);
		
		 relationshipPanel=new RelationshipsForm();
		//participantPanel=new ParticipantsForm(repos.getParticipant(index));
		participantPanel=new ParticipantsForm();
		participantPanel.addFormSaveListener(new FormSaveListener() {
			
			@Override
			public void FormSaveOccured(FormSaveEvent event) {
				System.out.println("Formsave "+event.getFormDetails());
				
			}
		});
		
		participantPanel.setTable(table);
        JTabbedPane tabbedPane=new JTabbedPane();
        GenericForm1 genForm=new GenericForm1();
        
       // JScrollPane scrollPane1=new JScrollPane(relationshipPanel);
        JScrollPane scrollPane1=new JScrollPane(genForm);
        JScrollPane scrollPane2=new JScrollPane(participantPanel);
        tabbedPane.addTab("Participant", scrollPane2);
        tabbedPane.addTab("RelationShip", scrollPane1);
        tabbedPane.addTab("Interests", new JPanel());
        
		
		
		
		JPanel tablePanel=new JPanel();
		tablePanel.setPreferredSize(new Dimension(800,400));
		tablePanel.setBorder(BorderFactory.createLineBorder(Color.black,1));
		
		
		JPanel contentPanel=new JPanel();
		contentPanel.setBorder(BorderFactory.createLineBorder(Color.black,1));
		c.add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
		
	/**	contentPanel.add(tabbedPane);
		tablePanel.add(sPane);
		
		contentPanel.add(Box.createVerticalGlue());
		
		contentPanel.add(tablePanel); **/
		
		formConfigurator2=FormFactory.getFormConfigurator2("project.Relationships",2);
		formConfigurator1=FormFactory.getFormConfigurator1("project.Participant",1);
		p=repos.getParticipant(3);
		r=repos.getRelationship(6);
		formConfigurator2.setFormData(r);
		formConfigurator1.setFormData(p);
		formPanel=new GenericForm3(formConfigurator1);
		formConfigurator1.bindForm(formPanel);
			formPanel.addFormSaveListener(new FormSaveListener() {
			
			@Override
			public void FormSaveOccured(FormSaveEvent event) {
				System.out.println("I am Clicked");
				
				searchField.setText("I am Clicked");
				
			}
		});
		JScrollPane scrollFormPane1=new JScrollPane(formPanel);
		contentPanel.add(scrollFormPane1);
		//contentPanel.add(new GenericForm1());
		
		
		JPanel footerPanel=new JPanel();
		footerPanel.setBackground(Color.blue);
		footerPanel.setPreferredSize(new Dimension(300,50));
		footerPanel.setBackground(new Color(64,128,255));
		footerPanel.setBorder(compoundBorder);
		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();
		}
		
		
		
		
		
		
		
		
	}
	
	
	
	private JMenuBar createMenuBar(){
		JMenuBar menuBar=new JMenuBar();
		JMenu file=new JMenu("File");
		menuBar.add(file);
		JMenuItem newParticipant=new JMenuItem("New Participant");
		JMenuItem removeParticipant=new JMenuItem("Remove Participant");
		JMenuItem viewAll=new JMenuItem("Show All");
		JMenuItem upload=new JMenuItem("Batch Upload");
		JMenuItem exit=new JMenuItem("Exit");
		file.add(newParticipant);
		file.addSeparator();
		file.add(removeParticipant);
		file.addSeparator();
		file.add(viewAll);
		file.addSeparator();
		file.add(upload);
		file.addSeparator();
		file.add(exit);
		
		JMenu help=new JMenu("Help");
		menuBar.add(help);
		JMenuItem appHelp=new JMenuItem("Application Help");
		help.add(appHelp);
		
	
		
		return menuBar;
	}
	
	private void createTestPanel(Container c){
		
		Border emptyBorder=BorderFactory.createEmptyBorder(5, 5, 5, 5);
		Border lineBorder=BorderFactory.createLineBorder(Color.red, 5, true);
		Border etchBorder=BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
		Border compoundBorder=BorderFactory.createCompoundBorder( emptyBorder,lineBorder);
		//Border compoundBorder1=BorderFactory.createCompoundBorder( compoundBorder,emptyBorder);
		
		JPanel panel1=new BorderPanel();
		panel1.setBorder(compoundBorder);
		panel1.setPreferredSize(new Dimension(200,200));
		FlowLayout flow=new FlowLayout();
		flow.setAlignment(FlowLayout.LEFT);
		panel1.setLayout(flow);
		RadioButtons panel3=new RadioButtons(new String[]{"1","2","3"},1);
		panel1.add(panel3,FlowLayout.LEFT);
		
		c.add(panel1,BorderLayout.CENTER);
		
		JPanel panel2=new BorderPanel();
		panel2.setPreferredSize(new Dimension(200,200));
		panel2.setBackground(Color.white);
		
		final JTextField field=new JTextField(10);
		JButton button=new JButton("Save");
		button.addActionListener( new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				field.setText(String.valueOf(panel3.getSelectedValue()));
				
			}
		});
		panel2.add(field);
		panel2.add(button);
		
		c.add(panel2,BorderLayout.SOUTH);
		
		
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("add")){
			participantPanel.populateForm(new Participant());
			table.clearSelection();
		}
			
		else if(e.getActionCommand().equals("remove")){
			((MyModel)table.getModel()).removeRecord(p);
			table.clearSelection();
		}
		
		int index;
		if (p==null){
			index=1;
		}
		else{
			index=p.getId();
		}
			
		
		if(e.getActionCommand().equals("next")){
			index++;
			p=repos.getParticipant(index);
			formConfigurator1.setFormData(p);
			formConfigurator1.bindForm(formPanel);
			r=repos.getRelationship(index);
			formConfigurator2.setFormData(r);
			//formConfigurator2.BindForm(formPanel);
		}
			
		else if(e.getActionCommand().equals("prev")){
			index--;
			p=repos.getParticipant(index);
			formConfigurator1.setFormData(p);
			formConfigurator1.bindForm(formPanel);
			r=repos.getRelationship(index);
			formConfigurator2.setFormData(r);
			//formConfigurator2.BindForm(formPanel);
		}
		
	}

	@Override
	public void valueChanged(ListSelectionEvent e) {
		System.out.println(table.getSelectedRow()+1);
		if (table.getSelectedRow()!=-1){
			p=repos.getParticipant(table.getSelectedRow()+1);
			participantPanel.populateForm(p);
			//relationshipPanel.populateForm(repos.getRelationship(table.getSelectedRow()+1));
		}
		
	}



	public void createTestPanel1(Container c){
		

		Border emptyBorder=BorderFactory.createEmptyBorder(15, 15, 15,15);
		Border lineBorder=BorderFactory.createLineBorder(Color.blue, 1, false);
		Border compoundBorder=BorderFactory.createCompoundBorder( new CustomBorder(1,Color.blue),emptyBorder);
		
		FlowLayout flowLayout=new FlowLayout(FlowLayout.LEFT);
		JPanel centerPanel=new JPanel();
		centerPanel.setBackground(new Color(186,219,241));
		centerPanel.setLayout(flowLayout);
		
		JPanel leftPanel=new JPanel();
		//leftPanel.setBackground(new Color(64,128,255));
		leftPanel.setBackground(new Color(186,219,241));
		leftPanel.setPreferredSize(new Dimension(200,100));
		leftPanel.setBorder(compoundBorder);
		
		JPanel topPanel=new JPanel();
		topPanel.setBackground(new Color(57,88,153));
		//topPanel.setPreferredSize(new Dimension(200,50));
		topPanel.setBackground(new Color(255,255,255));
		topPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 5,0));
		topPanel.setBorder(compoundBorder);
		
		JPanel footerPanel=new JPanel();
		footerPanel.setBackground(Color.blue);
		footerPanel.setPreferredSize(new Dimension(400,50));
		footerPanel.setBackground(new Color(64,128,255));
		footerPanel.setBorder(compoundBorder);
		
		
		//textField.setBorder(compoundBorder);
		Font fieldFont = new Font("Arial", Font.PLAIN, 12);
        
		
		JLabel label=new JLabel("This is Label");
		
		JButton button=new JButton("Test");
		RoundedTextField textField1=new RoundedTextField("Jeya",20);
		RoundedTextField textField2=new RoundedTextField("Jeya",20);
		topPanel.add(textField2);
		
		centerPanel.add(textField1);
		centerPanel.add(button);
		
		centerPanel.setBorder( compoundBorder);
		
		formConfigurator1=FormFactory.getFormConfigurator1("project.Participant",2);
		//contentPanel.add(new GenericForm3(formConfigurator));
		
		GenericForm3 formPanel=new GenericForm3(formConfigurator1);
		formPanel.addFormSaveListener(new FormSaveListener() {
			
			@Override
			public void FormSaveOccured(FormSaveEvent event) {
				System.out.println("I am Clicked");
				
			}
		});
		formPanel.setBorder(compoundBorder);
		JScrollPane scrollPane1=new JScrollPane(formPanel);
		
		c.add(scrollPane1,BorderLayout.CENTER);
		//c.add(centerPanel,BorderLayout.CENTER);
		c.add(leftPanel,BorderLayout.WEST);
		c.add(topPanel,BorderLayout.NORTH);
		c.add(footerPanel,BorderLayout.SOUTH);
		
	}

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

	
	

}
