/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Wireless;

import Main.Dibujable;
import Main.Entorno;
import java.util.ArrayList;

/**
 *
 * @author Administrador
 */
public class BaseStation extends Dibujable{

    ArrayList<MobileDevice> MDs;

    int ID;
    int X = 0;
    int Y = 0;

    /**
     *
     * @param ubicacionX Especifica la coordenada X de la Estación Base.
     * @param ubicacionY Especifica la coordenada y de la Estación Base.
     * @param ID es el ID de la Estación Base.
     */
    public BaseStation(Entorno entorno,int ID){
        super(entorno);
        this.ID = ID;
        setSpriteName("BS.gif");
    }
    /**
     *
     * @param MD Mobile Devise, se agrega un nuevo dispositivo mobil a la estacion base, si ya se encuentra le cambia la ubicacion.
     */
    public void add_Or_Move_MD(MobileDevice MD){
        int indice = -1;
        indice=MDs.indexOf(MD);
        if(indice==-1){
            MDs.add(MD);
        }else{
            MDs.get(indice).move_to(MD.get_X(), MD.get_Y());
        }
    }
    /**
     *
     * @return Coordenada X de la estacion Base.
     */
    public int get_X(){
        return X;
    }

    public int getID(){
        return ID;
    }


    public MobileDevice  get_MD(int indice){
        return MDs.get(indice);
    }

    /**
     *
     * @return Coordenada Y de la estacion Base.
     */
    public int get_Y(){
        return Y;
    }
    /* (non-Javadoc)
    * @see java.lang.Object#equals(java.lang.Object)
    */
   @Override
   public boolean equals(Object obj){
       if (this == obj)
           return true;
       if (obj == null)
           return false;
       if (getClass() != obj.getClass())
           return false;
        final BaseStation other = (BaseStation) obj;
        //Si el ID es igual es la misma estacion base.
       if(this.ID==other.ID)
           return true;
       else
           return false;
   }

   public double potenciaBS_MD(MobileDevice MD){
       double result;
       double distancia = Math.sqrt(Math.pow(this.x - MD.getX(),2)+Math.pow(this.y - MD.getY(),2));
       if(distancia <= 60){
           result = 15 - 15 -21.3*Math.log10(distancia);
       }else{
           result = 15 - 15 -21.3*Math.log10(60)-43.5*Math.log10(distancia/60);
       }
       java.util.Random random = new java.util.Random();
       random.setSeed(System.currentTimeMillis());
       result = result+random.nextGaussian(); 
       if(result < 0){
           return result;
       }else{
           return -0.000001;
       }
   }

}
