package com.virtual.tour.arquelogia.vista;

/**
 * Created by Roger Gomez.
 */

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.virtual.tour.arquelogia.R;

import java.io.File;
import java.util.ArrayList;
import java.util.List;


public class ExplorerFiles extends ListActivity {


    private List<String> item = null;

    private List<String> path = null;

    private String root = "";

    private TextView myPath;


    /**
     * Función que es llamada al crear la clase.
     * Lee la ruta de la memoria interna.
     *
     * @param savedInstanceState
     */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.lista_archivos);

        myPath = (TextView) findViewById(R.id.path);

        File sdCard = Environment.getExternalStorageDirectory();

        root = sdCard.getAbsolutePath();

        getDir(root);

    }


    /**
     * Función que lee los ficheros .gpx de la ruta interna de la memoria y crea la lista de ficheros .gpx.
     *
     * @param dirPath, ruta interna de la memoria del dispossitivo.
     */
    private void getDir(String dirPath) {

        myPath.setText("Ruta Ficheros: " + dirPath);

        item = new ArrayList<String>();

        path = new ArrayList<String>();

        File f = new File(dirPath);

        File[] files = f.listFiles();


        for (int i = 0; i < files.length; i++) {
            if (files[i].getName().contains(".gpx")) {
                path.add(files[i].getPath().toString());
                item.add(files[i].getName().toString());
            }
        }

        ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.row, item);

        setListAdapter(fileList);

    }


    /**
     * Función que al pulsar en un elemento de la lista, intenta abrir el .gpx con una aplicación instalada en el dispositivo
     *
     * @param l         , lista de ficheros.
     * @param v         ,vista de la lista.
     * @param position, posición donde hacemos click en la lista.
     * @param id        , id del elemnto de la lista.
     */
    @Override

    protected void onListItemClick(ListView l, View v, int position, long id) {

        final File file = new File(path.get(position));

        new AlertDialog.Builder(this)

                .setIcon(R.drawable.ic_launcher)

                .setTitle("[" + file.getName() + "]")

                .setPositiveButton(R.string.ok,

                        new DialogInterface.OnClickListener() {


                            @Override

                            public void onClick(DialogInterface dialog, int which) {

                                try {

                                    Intent i = new Intent();
                                    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                    File gpxFile = file;
                                    if(!gpxFile.isDirectory())
                                        gpxFile.mkdir();
                                    i.setAction(Intent.ACTION_VIEW);
                                    i.setDataAndType(Uri.fromFile(gpxFile),"application/xml");
                                    Intent chooser = Intent.createChooser(i, "Abrir fichero .gpx con:");
                                    startActivity(chooser);
                                } catch (Exception e) {
                                    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ExplorerFiles.this);
                                    alertDialogBuilder.setMessage(R.string.error_open_app);

                                    alertDialogBuilder.setPositiveButton(R.string.cerrar, new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface arg0, int arg1) {
                                            finish();
                                        }
                                    });
                                    AlertDialog alertDialog = alertDialogBuilder.create();
                                    alertDialog.show();
                                }


                            }

                        }).show();
    }

}
