/**
Clase Sala
@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;

/**
Implementa la clase Sala
*/
    public class Sala
   {
    /**
    Constructor de la clase Sala
    @param info, string de informacion correspondiente a la sala
    @param dib, objeto dibujo
    */
       Sala(String info, Dibujo dib){
         int x, y, w, h, r, g, b, link, piso;
         x = info.indexOf(":", 0);
         y = info.indexOf(":", x + 1);
         w = info.indexOf(":", y + 1);
         h = info.indexOf(":", w + 1);
         sala = new Rectangle2D.Double(Integer.parseInt(info.substring(0, x)),
                                    Integer.parseInt(info.substring(x + 1, y)), 
            								Double.parseDouble(info.substring(y + 1, w)), 
            								Double.parseDouble(info.substring(w + 1 , h)));
      
         r = info.indexOf(":", h + 1);
         g = info.indexOf(":", r + 1);
         b = info.indexOf(":", g + 1);
      
         color = new Color(Integer.parseInt(info.substring(h + 1, r)), 
            						Integer.parseInt(info.substring(r + 1, g)),
            						Integer.parseInt(info.substring(g + 1, b)));
         colortransp = new Color(245, 250, 19, 100);
         piso = info.indexOf(":", b + 1);
         this.piso = Integer.parseInt(info.substring(b + 1, piso));
         salainfo = new SalaInfo(info, piso, dib);
      		
      }
   
   /**
   Metodo que retorna valor de atributo fill
   return retorna tru o false dependiendo del contenido de fill
   */
       public boolean getFill()
      {
         return fill;
      }
   
   /** 
   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(color);
         g2d.fill(sala);
         g2d.draw(sala);		 
         if(fill) 
         {
            g2d.setPaint(colortransp);
            g2d.fill(sala);
            g2d.draw(sala);
            salainfo.paintComponent(g2d);
         }		 
      }
   
   /** 
   Metodo que hace invisible rectangulos luego de generada la 
   accion sobre la sala
   */
       public void desmarcar()
      {
         fill = false;
      }
   
   /** 
   Metodo que permite determinar si mouse presionado 
   se encuentra sobre la sala
   @param p Punto que identifica posicion del mouse sobre el panel
   return Retorna true si el punto se encuentra sobre una sala
   */
       public boolean find(Point2D p)
      {
      
         if (sala.contains(p))
         {
            fill = true; 
            salainfo.set(INFOHORIZONTAL, INFOVERTICAL, INFOANCHO, INFOALTO);
            return true;
         }
         else fill = false; 
         return false;
      }
   
   /**
   Metodo que encuentra el link asociado
   a cada sala o lugar del mapa
   @param p, punto en el cual se encuentra posicionado el mouse
   */
       public boolean findLink(Point2D p)
      {
         if(find(p)) 
            return true;
         else 
            return false;
      }
   
   /**
   return entrega el identificador del piso actual (2, 3 o 4)
   */
       public int getPiso()
      {
         return piso;
      }
   
   /**
   Metodo que determina si la sala se encuentra dentro de zona
   @param x coordenada de esquina superior de izquierda zona
   @param y coordenada de esquina superior izquierda de zona
   @param ancho ancho de zona
   @param alto alto de zona
   */
       public void findZona(double x, double y, double ancho, double alto)
      {
         int i = 0;
         if(sala.contains(x, y, ancho, alto))
         {
            fill = true;
         }
         else fill = false;
      }
   
   /**
   return entrega el la direccion URL asociada al sector del piso
   */
       public String getLink(){
         return salainfo.getLink();
      }
   
   /**
   return entrega el nombre de la sala seleccionada
   */
       public String getName(){
         return salainfo.getName();
      }
   
   
      public static final double CERO = 0.0;
      public static final int TRES = 3;
      public static final int CUATRO = 4;
      public static final double TAMANO = 8.0;
      public static final int INFOVERTICAL = 140;
      public static final int INFOHORIZONTAL = 730;
      public static final int INFOALTO = 350;
      public static final int INFOANCHO = 167;
   
      private Rectangle2D sala;
      private boolean fill = false;
      private String link;
      private int piso;  
      private Color color, colortransp;
      private SalaInfo salainfo;
   }
