package com.example.reproductordelistasmultimedia;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

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

import java.util.ArrayList;
import java.util.HashMap;

public class ListaVideosOnline extends ListActivity {

    // URL de los videos JSON
    private static String url = "http://reproductorlistaspfmjrf.pe.hu/listavideos.json";
    // Nodes JSON
    private static final String TAG_USER = "user";
    private static final String TAG_TITLE = "title";
    private static final String TAG_ID = "id";
    private static final String TAG_DESCRIPTION = "description";
    private static final String TAG_VIDEOURL = "videoUrl";
    private static final String TAG_CATEGORY = "category";
    private static final String TAG_IMAGEURL = "imageUrl";
    // Para la reproducción
    private static String enlace, enlace1;
    int[] flags = new int[]{
            R.drawable.gremlins,
            R.drawable.evildead2013,
            R.drawable.escapefromnewyork,
            R.drawable.manofsteel,
            R.drawable.carrie,
            R.drawable.armyofdarkness,
            R.drawable.planetoftheapes68,
            R.drawable.therockyhorror,
            R.drawable.cabinofthewoods,
            R.drawable.bbb,
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listavideos);

        // Ejecutamos GetVideos
        new GetVideos().execute();
    }

    /*
     Clase de AsyncTask para conseguir JSON con llamadas HTTP
     */
    private class GetVideos extends AsyncTask<Void, Void, Void> {

        // Hashmap del ListView
        ArrayList<HashMap<String, String>> videosList;
        ProgressDialog pDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            // Mostrando el ProgressDialog
            pDialog = new ProgressDialog(ListaVideosOnline.this);
            pDialog.setMessage("Espera, por favor...");
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected Void doInBackground(Void... arg0) {

            // Manejador de la clase
            WebRequest webreq = new WebRequest();

            // Haciendo la llamada a la url y consiguiendo respuesta
            String jsonStr = webreq.makeWebServiceCall(url, WebRequest.GET);

            Log.d("Response: ", "> " + jsonStr);

            videosList = ParseJSON(jsonStr);

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Quitar el ProgressDialog
            if (pDialog.isShowing())
                pDialog.dismiss();

            //Insertando datos JSON en el ListView
            ListAdapter adapter = new SimpleAdapter(
                    ListaVideosOnline.this, videosList,
                    R.layout.list_item1, new String[]{TAG_TITLE, TAG_DESCRIPTION,
                    TAG_CATEGORY, TAG_ID}, new int[]{R.id.title,
                    R.id.description, R.id.category, R.id.imagenurl});

            setListAdapter(adapter);

        }

    }

    private ArrayList<HashMap<String, String>> ParseJSON(String json) {
        if (json != null) {
            try {
                // Hashmap del ListView
                ArrayList<HashMap<String, String>> videoList = new ArrayList<HashMap<String, String>>();

                JSONObject jsonObj = new JSONObject(json);

                // Array de Nodes JSON
                JSONArray videos = jsonObj.getJSONArray(TAG_USER);

                // Buscando en todos los vídeos
                for (int i = 0; i < videos.length(); i++) {
                    JSONObject c = videos.getJSONObject(i);

                    String nombre = c.getString(TAG_TITLE);
                    String descripcion = c.getString(TAG_DESCRIPTION);
                    String categoria = c.getString(TAG_CATEGORY);
                    String imagen = c.getString(TAG_IMAGEURL);

                    // String correspondiente al enlace para reproducir el vídeo
                    enlace = c.getString(TAG_VIDEOURL);

                    // Hashmap para un único vídeo
                    HashMap<String, String> video = new HashMap<String, String>();

                    // Añadiendo nodes JSON según llave-valor
                    video.put(TAG_TITLE, nombre);
                    video.put(TAG_ID, Integer.toString(flags[i]));
                    video.put(TAG_DESCRIPTION, descripcion);
                    video.put(TAG_CATEGORY, categoria);
                    video.put(TAG_IMAGEURL, imagen);
                    video.put(TAG_VIDEOURL, enlace);

                    // Añadiendo vídeo a la lista
                    videoList.add(video);
                }
                return videoList;
            } catch (JSONException e) {
                e.printStackTrace();
                return null;
            }
        } else {
            Log.e("Manejador de Servicio", "No se puede obtener datos de la url");
            return null;
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    public void onListItemClick(ListView listView, View view, int position, long id)
    {
        super.onListItemClick (listView, view, position, id);

        HashMap<String, String> map = (HashMap<String, String>) getListView().getItemAtPosition(position);

        Intent intent = new Intent(this, Videoplayer_online.class);
        intent.putExtra("Video", map.get(TAG_VIDEOURL));
        enlace1 = intent.getExtras().getString("Video");
        Toast.makeText(this, "Selección: Vídeo nº " + Integer.toString(position +1), Toast.LENGTH_LONG).show();
        this.startActivity(intent);
    }

    // Método para establecer el enlace en la clase Videoplayer
    public static String setEnlaceOnline() {
        Log.d("Videoplayer_online", "setEnlaceOnline");
        return enlace1;
    }

}






