/**
Clase SalaInfo
@author Diego Gonzalez
@author José Ignacio Guerra
@author Patricio Valle
*/

   import java.awt.*;
   import java.awt.geom.*;
   import java.lang.Math;
   import java.util.ArrayList;
   import java.awt.image.BufferedImage;
   import java.net.*;
   import javax.imageio.ImageIO;

/**
Implementa la clase SalaInfo
*/
    public class SalaInfo
   {
   /**
   Constructor de la clase SalaInfo
   @param info, string de informacion correspondiente a la sala
   @param dib, objeto dibujo	SalaInfo(String info, int i, Dibujo dib)
   */
	SalaInfo(String info, int i, Dibujo dib)
      {
         zonainfo = new Rectangle2D.Double(MARCOHORIZONTAL, MARCOVERTICAL, 0, 0);
         int aux = i;
         i = info.indexOf(":", i + 1);
         infolink = info.substring(aux+1, i);
         aux = i;
         i = info.indexOf(":", i + 1);
         imagensala = null;
         if((aux+1)!=i)
            imagensala = info.substring(aux + 1, i);
      
         aux = i;
         dibujo = dib;
         colorinfo = new Color(215, 215, 255, 255);
         colortitle = new Color(255, 255, 255, 255);
         colorlegend = new Color(0, 0, 128, 128);
         int fin = lastIndexInfo(info);
      
         infosala = new ArrayList();
         legendasala = new ArrayList();
         while(i < fin)
         {
            i = info.indexOf(":", i + 1);
            infosala.add(info.substring(aux + 1, i));
            aux = i;	
         }
         logoimage = loadImage((String)infosala.get(0)+".png");
      //System.out.println(((String)infosala.get(0)+".png"));
         i = fin;
         aux=i;
         fin = info.lastIndexOf(":");
         while(i < fin)
         {
            i = info.indexOf(":", i + 1);
            legendasala.add(info.substring(aux + 1, i));
            aux = i;	
         }
      
      }
   	
    /** 
    Metodo que nos permite que la sala sea dibujable
    @param g2d Objeto graphics2d que permite dibujar la sala
    */	 	
       public void paintComponent(Graphics2D g2d)
      {
         g2d.setPaint(colorinfo);
         g2d.fill(zonainfo);
         infoimage = loadImage("infosala.png");
         g2d.drawImage(infoimage,INFOHORIZONTAL,INFOVERTICAL,dibujo);
         if (imagensala!=null)
         {
            infoimage = loadImage(imagensala);
         
            g2d.drawImage(infoimage, 148, 253, dibujo);
         }
         g2d.drawImage(logoimage,LOGOHORIZONTAL,LOGOVERTICAL,dibujo);
      //g2d.draw(zonainfo);
         g2d.setStroke(new BasicStroke(2.0f));
         g2d.setFont(new Font("Berlin Sans FB",Font.PLAIN,12));
         g2d.setPaint(colortitle);
         for (int j = 0; j < infosala.size(); j++)
         {
            if(j==1)
               g2d.drawString((String)infosala.get(j), INFOHORIZONTAL+30, INFOVERTICAL + 15*j + 15);
            else
               g2d.drawString((String)infosala.get(j), INFOHORIZONTAL+10, INFOVERTICAL + 15*j + 15);
         }
         g2d.setPaint(colorlegend); 
         g2d.setFont(new Font("Californian FB",Font.BOLD,11));
         for (int j = 0; j < legendasala.size(); j++)
         {
            g2d.drawString((String)legendasala.get(j), MARCOHORIZONTAL+8, MARCOVERTICAL + 15*j + 60);
         }		
      
      
      }
   
       public void set(int INFOHORIZONTAL, int INFOVERTICAL, int INFOANCHO, int INFOALTO)
      {
         zonainfo.setRect(MARCOHORIZONTAL, MARCOVERTICAL, INFOANCHO, INFOALTO);
      }
   
   /**
   Permite cargar la imagen asociada a la sala
   @param nombre, string con el nombre correspondiente a la sala
   */
       public BufferedImage loadImage(String nombre) {
         URL url=null;
         try { 
            url = getClass().getClassLoader().getResource(nombre);
            return ImageIO.read(url);
         } 
             catch (Exception e) {
               System.out.println("No se pudo cargar la imagen " + nombre +" de "+url);
               System.out.println("El error fue : "+e.getClass().getName()+" "+e.getMessage());
               System.exit(0);
               return null;
            }
      }
   
   /**
   return entrega el la direccion URL asociada al sector del piso
   */
       public String getLink(){
         return infolink;
      }
   
   /**
   return entrega el nombre de la sala seleccionada
   */	
       public String getName(){
         return (String)infosala.get(1);
      }
   
   /**
   return entrega la posicion del ultimo ":" del string 
   de informacion correspondiente a la sala
   @param info, string de informacion correspondiente a la sala
   */
       private int lastIndexInfo(String info){
         int index = info.indexOf(":");
         int dospuntos = 1;
         while(dospuntos<12){
            index = info.indexOf(":", index + 1);
            dospuntos++;
         }
         return index;
      } 
   
      private Rectangle2D  zonainfo;
      private Color colorinfo, colortitle, colorlegend;
      private ArrayList infosala;
      private ArrayList legendasala;
      private BufferedImage infoimage;
      private BufferedImage logoimage;
      private BufferedImage fotoprofe;
      private Dibujo dibujo;
      private String infolink;
      private String imagensala;
   
      public static final int INFOVERTICAL = 140;
      public static final int INFOHORIZONTAL = 730;
      public static final int MARCOVERTICAL = 230;
      public static final int MARCOHORIZONTAL = 730;
      public static final int LOGOHORIZONTAL = 860;
      public static final int LOGOVERTICAL = 200;
   
   
   }