
import javax.swing.*;
import us.monoid.web.JSONResource;
import us.monoid.web.Resty;
import java.io.IOException;
import java.awt.*;
import java.awt.event.*;


@SuppressWarnings("serial")

/**
 * Clase que genera los componentes de la pantalla principal
 * @author Gonzalo Sanchez, Anibal Catalan, Carlos Polanco, Daniel Veas.
 * @since 30/07/2014
 */
public class ComponentesFormII extends JFrame {
	static JTextArea profesor = new JTextArea();
	static JTextArea curso = new JTextArea();
	static JTextArea estudiante = new JTextArea();
	 static JScrollPane scrollPane_estudiante = new JScrollPane();
	 static JScrollPane scrollPane_curso = new JScrollPane();
	 static JScrollPane scrollPane_profesor = new JScrollPane();
 JButton salirButton, nuevoDiscoButton, AgregarButton;
 JTable discosTable, librosTable;
 //LibrosTableModel librosTableModel;
  
 /**
  * Constructor de la Clase
  */
 public ComponentesFormII() {
  initForm();
  initComponents();
  setVisible(true);
 }
 
 /**
  * Clase que inicia la configuracion de los datos
  */
 private void initForm() {
  setTitle("Proyecto");
  setSize(640, 480);
  setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
  addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) { onWindowClosing(e); }
  });
  setLocationRelativeTo(null);
 }
 
 /**
  * Clase que inicia los componentes, genera el panel dividido en diferentes pestañas.
  */
 private void initComponents() {
  salirButton = new JButton("Salir");
  salirButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) { onSalirButtonActionPerformed(e); }
  });
  salirButton.setMnemonic(KeyEvent.VK_S);
   
  JPanel botonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
  botonPanel.add(salirButton);
   
  JTabbedPane PanelPrincipal = new JTabbedPane();
  PanelPrincipal.add("Cursos", cursoPanel());
  PanelPrincipal.add("Profesor", profesorPanel());
  PanelPrincipal.add("Estudiante", estudiantePanel());
    
  getContentPane().add(PanelPrincipal, BorderLayout.CENTER);
  getContentPane().add(botonPanel, BorderLayout.SOUTH);
 }
 
 /**
  * Funcion que actua como evento cuando se hace click en el boton "salir".
  * @param e Evento Capturado
  */
 protected void onWindowClosing(WindowEvent e) {
  salir();
 }
 
 /**
  * Funcion que actua como evento cuando se hace click en el boton "salir".
  * @param e Evento Capturado
  */
 protected void onSalirButtonActionPerformed(ActionEvent e) {
  salir();
 }
 
 /**
  * Funcion que genera un panel para preguntar si desea salir.
  */
 private void salir() {
 
  int respuesta = JOptionPane.showConfirmDialog(this, "¿Está seguro de que quiere salir?", "Salir", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
  if (respuesta == JOptionPane.YES_OPTION) {
   dispose();
  }
 }
  
 /**
  * Funcion para generar el panel del profesor
  * @return JPanel con las configuraciones del profesor
  */
 private JPanel profesorPanel() {
  AgregarButton = new JButton("Añadir profesor");
  AgregarButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) { onNuevoProfesorButtonActionPerformed(e); }
  });

  JPanel botonPanel = new JPanel();
  botonPanel.add(AgregarButton);
  JPanel tablaPanel = new JPanel(new BorderLayout());
  tablaPanel.setBorder(BorderFactory.createTitledBorder(" Profesores: "));
  tablaPanel.add(botonPanel, BorderLayout.SOUTH);

  texto_area_profesor();
  tablaPanel.add(profesor);
  scrollPane_profesor.setViewportView(profesor);
  tablaPanel.add(scrollPane_profesor, BorderLayout.CENTER);

  return tablaPanel;
 }
 
 /**
  * Funcion para generar el panel del curso
  * @return JPanel con las configuraciones del curso
  */
  private JPanel cursoPanel() {
	  AgregarButton = new JButton("Añadir curso");
	  AgregarButton.addActionListener(new ActionListener() {
	   public void actionPerformed(ActionEvent e) { onNuevoCursoButtonActionPerformed(e); }
	  });

	   
	  JPanel botonPanel = new JPanel();
	  botonPanel.add(AgregarButton);
	  JPanel tablaPanel = new JPanel(new BorderLayout());
	  tablaPanel.setBorder(BorderFactory.createTitledBorder(" Curso: "));
	  tablaPanel.add(botonPanel, BorderLayout.SOUTH);
	   

	  texto_area_curso();
	  tablaPanel.add(curso);
	  scrollPane_curso.setViewportView(curso);
	  tablaPanel.add(scrollPane_curso, BorderLayout.CENTER);
	  
	  return tablaPanel;
  }
  
  /**
   * Funcion para generar el panel del estudiante
   * @return JPanel con las configuraciones del estudiante
   */
  private JPanel estudiantePanel() {
	  AgregarButton = new JButton("Añadir estudiante");
	  AgregarButton.addActionListener(new ActionListener() {
		  public void actionPerformed(ActionEvent e) { onNuevoEstudianteButtonActionPerformed(e); }
	  }); 
  JPanel botonPanel = new JPanel();
  botonPanel.add(AgregarButton);
  JPanel tablaPanel = new JPanel(new BorderLayout());
  tablaPanel.setBorder(BorderFactory.createTitledBorder(" Estudiantes: "));
  tablaPanel.add(botonPanel, BorderLayout.SOUTH);
  texto_area_estudiante();
  tablaPanel.add(estudiante);
  scrollPane_estudiante.setViewportView(estudiante);
  tablaPanel.add(scrollPane_estudiante, BorderLayout.CENTER);
  return tablaPanel;
 }
 
  /**
   * Funcion que actua como evento cuando se hace click en el boton "Añadir Curso".
   * @param e Evento Capturado
   */
 protected void onNuevoCursoButtonActionPerformed(ActionEvent e) {
	 new Curso();
 	 }
 
 /**
  * Funcion que actua como evento cuando se hace click en el boton "Añadir Estudiante".
  * @param e Evento Capturado
  */
 protected void onNuevoEstudianteButtonActionPerformed(ActionEvent e) {
	  new Estudiante();
	  }
 
 /**
  * Funcion que actua como evento cuando se hace click en el boton "Añadir Profesor".
  * @param e Evento Capturado
  */
 protected void onNuevoProfesorButtonActionPerformed(ActionEvent e) {
	 new Profesor();
	 }

 /**
  * Funcion que genera una lista con los profesores guardados para mostrarla en el panel
  */
 static void texto_area_profesor(){
	 Resty r = new Resty();
	 JSONResource test;
	 int total;
	 try{
		 test = r.json("http://dev.tuix.cl/proyecto/api/teacher");
	     total = Integer.parseInt(test.get("data.total").toString());
	     for(int i = 0; i < total; i++) {
	    	 profesor.append(test.get("data.teachers["+i+"].name")+": "+test.get("data.teachers["+i+"].id")+"\n");
	    	 }
	     scrollPane_profesor.setViewportView(profesor);
	  } catch (IOException e) {
	      e.printStackTrace();
	  } catch (Exception e) {
	      e.printStackTrace();
	  }
 }
 
 /**
  * Funcion que genera una lista con los estudiantes guardados para mostrarla en el panel
  */
 static void texto_area_estudiante(){
	 
	 Resty r = new Resty();
	  JSONResource test;
	  int total;
	  try{
	      test = r.json("http://dev.tuix.cl/proyecto/api/student");
	      total = Integer.parseInt(test.get("data.total").toString());
	      for(int i = 0; i < total; i++) {	    	  
	    	  estudiante.append(test.get("data.students["+i+"].name")+"\n");
	      }
	      scrollPane_estudiante.setViewportView(estudiante);	
	  } catch (IOException e) {
	      e.printStackTrace();
	  } catch (Exception e) {
	      e.printStackTrace();
	  }
	 
	 
}
 
 /**
  * Funcion que genera una lista con los cursos guardados para mostrarla en el panel
  */
 static public void texto_area_curso(){
	 
	 Resty r = new Resty();
	  JSONResource test;
	  int total;
	  try{
	      test = r.json("http://dev.tuix.cl/proyecto/api/course");
	      total = Integer.parseInt(test.get("data.total").toString());
	      for(int i = 0; i < total; i++) {	  
	    	  curso.append("curso: "+test.get("data.courses["+i+"].name")+"   codigo: "+test.get("data.courses["+i+"].code")+"\n");
	      }  
	      scrollPane_curso.setViewportView(curso);
	  } catch (IOException e) {
	      e.printStackTrace();
	  } catch (Exception e) {
	      e.printStackTrace();
	  }
	 }
}