package org.example.listadoedificios;

import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.util.Log;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class Mapa extends FragmentActivity implements LocationListener {

	private static final long TIEMPO_MIN = 10 * 1000; // 10 segundos
	private static final long DISTANCIA_MIN = 5; // 5 metros
	private static final long DOS_MINUTOS = 2 * 60 * 1000;

	private LocationManager manejador;
	
	Location localizacion_actual, localizacion_mejor;

	public LatLng POS;

	ImageView imagen_edif; // Imagen del edificio

	private GoogleMap mapa;

	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		// Recuperamos datos del elemento de ListView clicado

		Bundle extras = getIntent().getExtras();

		String Edificio = extras.getString("Titulo");
		String Descripcion = extras.getString("SubTitulo");
		String Latitud = extras.getString("Latitud");
		String Longitud = extras.getString("Longitud");
		String Direccion = extras.getString("Direccion");
		String Superficie = extras.getString("Superficie");
		String Envolvente = extras.getString("Envolvente");
		String Equipostic = extras.getString("Equipostic");
		
		String Tomasdatos = extras.getString("Tomasdatos");
		String Tomascorriente = extras.getString("Tomascorriente");
		
		
	
		
//		 Toast.makeText(this,
//				 "Titulo " + Edificio ,
//				 Toast.LENGTH_SHORT).show();

//		 Toast.makeText(this,
//		 "Localización strings: " + Latitud + "   " + Longitud,
//		 Toast.LENGTH_SHORT).show();

		double lat = Double.parseDouble(Latitud);
		double lon = Double.parseDouble(Longitud);

		LatLng POS = new LatLng(lat, lon);

//		Toast.makeText(this, "Edificio: " + Edificio, Toast.LENGTH_SHORT)
//				.show();
//		Toast.makeText(this, "Localización double: " + POS, Toast.LENGTH_SHORT)
//				.show();

		// Aqui recuperamos la posicion del mapa

		setContentView(R.layout.mapa2);

		mapa = ((SupportMapFragment) getSupportFragmentManager()

		.findFragmentById(R.id.map)).getMap();

		mapa.setMapType(GoogleMap.MAP_TYPE_HYBRID);

		mapa.moveCamera(CameraUpdateFactory.newLatLngZoom(POS, 17));

		mapa.setMyLocationEnabled(true);

		mapa.getUiSettings().setZoomControlsEnabled(false);

		mapa.getUiSettings().setCompassEnabled(true);

		mapa.addMarker(new MarkerOptions()

		.position(POS)

		.title(Edificio)

		.snippet(Descripcion)

		.icon(BitmapDescriptorFactory

		.fromResource(R.drawable.ic_launcher))

		.anchor(0.5f, 0.5f));

		// mapa.setOnMapClickListener(this);

		// Metemos la imagen del edificio

		ImageView edif = (ImageView) findViewById(R.id.img);

		if (extras.getString("Titulo").equals("EASMU"))

			edif.setImageResource(R.drawable.easmubig);
		else

		if (extras.getString("Titulo").equals("Sede Calatrava"))

			edif.setImageResource(R.drawable.calatravabig);
		else

		if (extras.getString("Titulo").equals("EASMIN"))

			edif.setImageResource(R.drawable.easminbig);
		else

		if (extras.getString("Titulo").equals("Biblioteca de Asturias"))

			edif.setImageResource(R.drawable.bibliotecabig);
		
//		Ponemos el nombre del edificio sobre la foto
		TextView edi = (TextView) findViewById(R.id.LblEdif);
        edi.setText(Edificio);

	}

	// // Métodos del ciclo de vida de la actividad
	@Override
	protected void onResume() {
		super.onResume();

		activarProveedor(); // localizacion basada en redes
	}

	private void activarProveedor() {
		// inicializa listener GPS, indica tiempo/distancia

		if (manejador != null
				&& (manejador
						.isProviderEnabled(LocationManager.NETWORK_PROVIDER))) {
			manejador.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
					TIEMPO_MIN, DISTANCIA_MIN, this);
		} else {
			log("     ", " No se puede activar el localizador");
		}
	}

	public void moveCamera(View view) {

		Bundle extras = getIntent().getExtras();
		String Latitud = extras.getString("Latitud");
		String Longitud = extras.getString("Longitud");

		double lat = Double.parseDouble(Latitud);
		double lon = Double.parseDouble(Longitud);

		LatLng POS = new LatLng(lat, lon);

//		Toast.makeText(this, "Localización en moveCamera: " + POS,
//				Toast.LENGTH_SHORT).show();

		mapa.animateCamera(CameraUpdateFactory.newLatLngZoom(POS, 17));

	}

	public void animateCamera(View view) {

		if (mapa.getMyLocation() != null)

			mapa.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
					mapa.getMyLocation().getLatitude(), mapa.getMyLocation()
							.getLongitude()), 15));

	}

	public void addMarker(View view) {

		mapa.addMarker(new MarkerOptions().position(

		mapa.getCameraPosition().target));

	}

	public void onMapClick(LatLng puntoPulsado) {

		mapa.addMarker(new MarkerOptions().position(puntoPulsado).

		icon(BitmapDescriptorFactory

		.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)));

	}

	public void lanzarPlanos(View view) {

		Intent i = new Intent(this, Planos.class);
		startActivity(i);
	}
	
	public void lanzarDatos(View view) {

		
//		Recuperamos datos de Extras
		
		Bundle extras = getIntent().getExtras();

		String Edificio = extras.getString("Titulo");
		String Descripcion = extras.getString("SubTitulo");
		String Latitud = extras.getString("Latitud");
		String Longitud = extras.getString("Longitud");
		String Direccion = extras.getString("Direccion");
		String Superficie = extras.getString("Superficie");
		String Envolvente = extras.getString("Envolvente");
		String Equipostic = extras.getString("Equipostic");
		
		String Tomasdatos = extras.getString("Tomasdatos");
		String Tomascorriente = extras.getString("Tomascorriente");
		
		
//		Guardamos datos en Extras para actividad Datos
		
		Intent i = new Intent();
		i.setClass(getApplicationContext(), Datos.class);
		
					
		i.putExtra("Titulo", Edificio);
		i.putExtra("SubTitulo", Descripcion);
		i.putExtra("Latitud", Latitud);
		i.putExtra("Longitud", Longitud);
		i.putExtra("Direccion", Direccion);
		i.putExtra("Superficie", Superficie);
		i.putExtra("Envolvente", Envolvente);
		i.putExtra("Equipostic", Equipostic);
		i.putExtra("Tomasdatos", Tomasdatos);
		i.putExtra("Tomascorriente", Tomascorriente);
		

		startActivity(i);
	}

	@Override
	public void onLocationChanged(Location arg0) {
		// TODO Auto-generated method stub
		actualizaMejorLocaliz(arg0);
		Bundle extras = getIntent().getExtras();
		String Latitud = extras.getString("Latitud");
		String Longitud = extras.getString("Longitud");

		double lat = Double.parseDouble(Latitud);
		double lon = Double.parseDouble(Longitud);

		LatLng POS = new LatLng(lat, lon);

//		Toast.makeText(this, "Localización en onLocationChanged: " + POS,
//				Toast.LENGTH_SHORT).show();

		mapa.animateCamera(CameraUpdateFactory.newLatLngZoom(POS, 17));
	}

	@Override
	public void onProviderDisabled(String arg0) {
		// TODO Auto-generated method stub
		activarProveedor();
	}

	@Override
	public void onProviderEnabled(String arg0) {
		// TODO Auto-generated method stub
		activarProveedor();
	}

	@Override
	public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
		// TODO Auto-generated method stub
		activarProveedor();
	}

	// Métodos para mostrar información
	private void log(String s1, String s2) {

		Log.i(s1, s2);

	}

	private void actualizaMejorLocaliz(Location localiz) {
		if (localiz != null
				&& (localizacion_mejor == null
						|| localiz.getAccuracy() < 2 * localizacion_mejor
								.getAccuracy() || localiz.getTime()
						- localizacion_mejor.getTime() > DOS_MINUTOS)) {
			localizacion_mejor = localiz;

		}
	}

}
