package org.example.proyecto;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.Calendar;

/**
 * Created by Victor on 08/09/2016.
 */
public class Clima extends Activity {

    String imgUrl = "http://openweathermap.org/img/w/";

    public JSONObject jObj,coordObj,mainObj,windObj,cloudsObj,sysObj,weatherObj;
    public JSONArray weatherArr;

    Bitmap imgBitmap;

    public TabLayout tabs;

    public AdaptadorCiudades adaptador;

    LinearLayout linearForecast;

    TextView pressLab,humLab,windLab,direccionLab,separacion,cityText_textView,condDescr_textView,temp_textView,hum_textView,press_textView,
            windSpeed_textView,windDeg_textView,temp_min_textView,temp_max_textView,fecha,rain;
    ImageView imgView,imageNext0,imageNext1,imageNext2,imageNext3,imageNext4;

    TextView textNext0,textNext1,textNext2,textNext3,textNext4,textNextTemp0,textNextTemp1,textNextTemp2,
            textNextTemp3,textNextTemp4,textNextDescription0,textNextDescription1,textNextDescription2,
            textNextDescription3,textNextDescription4;

    public int posicionPrediccion;

    Calendar c = Calendar.getInstance();

    public int horas,minutos,segundos,dia_semana,dia_mes;
    public String diaSemana;


    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.clima);

        /*
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.añadirCiudad);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CustomDialog cdd=new CustomDialog(Clima.this);
                cdd.show();
            }
        });
        */

        fecha = (TextView) findViewById(R.id.fecha);

        pressLab = (TextView) findViewById(R.id.pressLab);
        humLab = (TextView) findViewById(R.id.humLab);
        windLab = (TextView) findViewById(R.id.windLab);
        direccionLab = (TextView) findViewById(R.id.direccionLab);
        separacion = (TextView) findViewById(R.id.separacion);

        linearForecast = (LinearLayout) findViewById(R.id.linearForecast);


        cityText_textView = (TextView) findViewById(R.id.cityText);
        condDescr_textView = (TextView) findViewById(R.id.condDescr);
        temp_textView = (TextView) findViewById(R.id.temp);
        hum_textView = (TextView) findViewById(R.id.hum);
        press_textView = (TextView) findViewById(R.id.press);
        windSpeed_textView = (TextView) findViewById(R.id.windSpeed);
        windDeg_textView = (TextView) findViewById(R.id.windDeg);
        imgView = (ImageView) findViewById(R.id.condIcon);
        temp_min_textView = (TextView) findViewById(R.id.temp_min);
        temp_max_textView = (TextView) findViewById(R.id.temp_max);
        rain = (TextView) findViewById(R.id.rain);

        textNext0 = (TextView) findViewById(R.id.textNext0);
        textNext1 = (TextView) findViewById(R.id.textNext1);
        textNext2 = (TextView) findViewById(R.id.textNext2);
        textNext3 = (TextView) findViewById(R.id.textNext3);
        textNext4 = (TextView) findViewById(R.id.textNext4);
        textNextDescription0 = (TextView) findViewById(R.id.textNextDescription0);
        textNextDescription1 = (TextView) findViewById(R.id.textNextDescription1);
        textNextDescription2 = (TextView) findViewById(R.id.textNextDescription2);
        textNextDescription3 = (TextView) findViewById(R.id.textNextDescription3);
        textNextDescription4 = (TextView) findViewById(R.id.textNextDescription4);
        textNextTemp0 = (TextView) findViewById(R.id.textNextTemp0);
        textNextTemp1 = (TextView) findViewById(R.id.textNextTemp1);
        textNextTemp2 = (TextView) findViewById(R.id.textNextTemp2);
        textNextTemp3 = (TextView) findViewById(R.id.textNextTemp3);
        textNextTemp4 = (TextView) findViewById(R.id.textNextTemp4);
        imageNext0 = (ImageView) findViewById(R.id.imageNext0);
        imageNext1 = (ImageView) findViewById(R.id.imageNext1);
        imageNext2 = (ImageView) findViewById(R.id.imageNext2);
        imageNext3 = (ImageView) findViewById(R.id.imageNext3);
        imageNext4 = (ImageView) findViewById(R.id.imageNext4);


        Aplicacion app = (Aplicacion) getApplication();
        adaptador = app.getAdaptador();

        Bundle extras = getIntent().getExtras();
        int posicion = extras.getInt("posicion");


        if (adaptador.vectorCiudades.isEmpty()){

            cityText_textView.setText("Ninguna ciudad introducida");
            pressLab.setVisibility(View.GONE);
            humLab.setVisibility(View.GONE);
            windLab.setVisibility(View.GONE);
            direccionLab.setVisibility(View.GONE);
            separacion.setVisibility(View.GONE);
            linearForecast.setVisibility(View.GONE);


        } else {

            pressLab.setVisibility(View.VISIBLE);
            humLab.setVisibility(View.VISIBLE);
            windLab.setVisibility(View.VISIBLE);
            direccionLab.setVisibility(View.VISIBLE);
            separacion.setVisibility(View.VISIBLE);
            linearForecast.setVisibility(View.VISIBLE);

            introducirClima(adaptador.vectorCiudades.elementAt(posicion).nombreCiudad,posicion);

            //Pestañas
            tabs = (TabLayout) findViewById(R.id.tabs);

            tabs.addTab(tabs.newTab().setText(adaptador.vectorCiudades.elementAt(posicion).nombreCiudad));

            for (int i=0;i<adaptador.vectorCiudades.size();i++){

                if(i != posicion){
                    tabs.addTab(tabs.newTab().setText(adaptador.vectorCiudades.elementAt(i).nombreCiudad));
                }

            }

            tabs.setTabMode(TabLayout.MODE_SCROLLABLE);
            tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                @Override public void onTabSelected(TabLayout.Tab tab) {

                    for (int i=0;i<adaptador.vectorCiudades.size();i++){
                        if (adaptador.vectorCiudades.elementAt(i).nombreCiudad.equals(tab.getText().toString())){
                            introducirClima(adaptador.vectorCiudades.elementAt(i).nombreCiudad, i);
                            break;
                        }
                    }

                }
                @Override public void onTabUnselected(TabLayout.Tab tab) {}
                @Override public void onTabReselected(TabLayout.Tab tab) {}
            });

        }

    }


    public void introducirClima(String ciudad, int posicion){


        cityText_textView.setText(ciudad + ", " + adaptador.vectorCiudades.elementAt(posicion).country);
        condDescr_textView.setText(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.weatherMain
                + " ("+ adaptador.vectorCiudades.elementAt(posicion).tiempoActual.description + ")");
        temp_textView.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.temp+"º"));
        temp_min_textView.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.temp_min+"º"));
        temp_max_textView.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.temp_max+"º"));
        hum_textView.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.humidity+"%"));
        press_textView.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.pressure+"hPa"));
        windSpeed_textView.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.speed+"mps "));
        rain.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.rain)+"mm");


        if (adaptador.vectorCiudades.elementAt(posicion).tiempoActual.windDirection == null){
            windDeg_textView.setText("N");
        } else{
            windDeg_textView.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.windDirection));
        }

        imgView.setImageBitmap(adaptador.vectorCiudades.elementAt(posicion).tiempoActual.bitmapIcon);


        //Forecast
        dia_semana = c.get(Calendar.DAY_OF_WEEK);

        fecha.setText(obtenerDiaSemana(dia_semana)+" "+c.get(Calendar.DAY_OF_MONTH)+"/"+
                String.valueOf((c.get(Calendar.MONTH))+1)+"/"+String.valueOf(c.get(Calendar.YEAR)));

        textNext0.setText(obtenerDiaSemana(dia_semana));
        textNext1.setText(obtenerDiaSemana(dia_semana));
        textNext2.setText(obtenerDiaSemana(dia_semana));
        textNext3.setText(obtenerDiaSemana(dia_semana));
        textNext4.setText(obtenerDiaSemana(dia_semana));


        /*
        for (int i=0;i<adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.size();i++){

            int diaPrediccion = Integer.parseInt(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(i).dt_txt.substring(8,10));
            int horaPrediccion = Integer.parseInt(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(i).dt_txt.substring(11,13));

            if (diaPrediccion>diaAux & Integer.toString(horaPrediccion)=="12"){
                posicionPrediccion = i;
                break;
            }
        }
        */

        //Día 1 siguiente
        imageNext0.setImageBitmap(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(0).bitmapIcon);

        textNextTemp0.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(0).temp_min)+
                "º/" + String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(0).temp_max)+"º");

        textNextDescription0.setText(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(0).description);


        //Día 2 siguiente
        //posicionPrediccion = posicionPrediccion+8;

        imageNext1.setImageBitmap(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(1).bitmapIcon);

        textNextTemp1.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(1).temp_min)+
                "º/" + String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(1).temp_max)+"º");

        textNextDescription1.setText(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(1).description);


        //Día 3 siguiente
        //posicionPrediccion = posicionPrediccion+8;

        imageNext2.setImageBitmap(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(2).bitmapIcon);

        textNextTemp2.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(2).temp_min)+
                "º/" + String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(2).temp_max)+"º");

        textNextDescription2.setText(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(2).description);


        //Día 4 siguiente
        //posicionPrediccion = posicionPrediccion+8;

        imageNext3.setImageBitmap(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(3).bitmapIcon);

        textNextTemp3.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(3).temp_min)+
                "º/" + String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(3).temp_max)+"º");

        textNextDescription3.setText(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(3).description);


        //Día 5 siguiente

        imageNext4.setImageBitmap(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(4).bitmapIcon);

        textNextTemp4.setText(String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(4).temp_min)+
                "º/" + String.valueOf(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(4).temp_max)+"º");

        textNextDescription4.setText(adaptador.vectorCiudades.elementAt(posicion).vectorPrediccion.elementAt(4).description);


    }

    public String obtenerDiaSemana(int i){

        switch (i){
            case Calendar.SUNDAY:
                dia_semana = dia_semana+1;
                return "Domingo";

            case Calendar.MONDAY:
                dia_semana = dia_semana+1;
                return "Lunes";

            case Calendar.TUESDAY:
                dia_semana = dia_semana+1;
                return "Martes";

            case Calendar.WEDNESDAY:
                dia_semana = dia_semana+1;
                return "Miércoles";

            case Calendar.THURSDAY:
                dia_semana = dia_semana+1;
                return "Jueves";

            case Calendar.FRIDAY:
                dia_semana = dia_semana+1;
                return "Viernes";

            case Calendar.SATURDAY:
                dia_semana = 1;
                return "Sábado";

        }

        return "Domingo";

    }
}
