package com.virtual.pollentia.WalkingTour.modelo;

/**
 * Created by Roger Gomez
 */

import android.app.AlertDialog;
import android.content.Context;
import android.widget.Toast;

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


public class ImageUtils {

    //contexto de la activity
    private Context _context;

    //ruta de las imagenes
    public static final String PHOTO_ALBUM = "pollentia_files/images";

    // formatos de imagen soportados
    public static final List<String> FILE_EXTN = Arrays.asList("jpg", "jpeg",
            "png");

    /**
     * Contructor de la clase.
     *
     * @param context contexto de la activity que lo llama
     */

    public ImageUtils(Context context) {
        this._context = context;
    }

    /**
     * Lee las rutas de fichero de la memòria interna.
     *
     * @param ids id's de las imagenes de las que quueremos la tuta
     * @return ArrayList con las rutas de las immàgenes.
     */
    public ArrayList<String> getFilePaths(ArrayList<String> ids) {
        ArrayList<String> filePaths = new ArrayList<String>();
        File directory = new File(
                android.os.Environment.getExternalStorageDirectory()
                        + File.separator + PHOTO_ALBUM);

        // comprobamos si es un directorio
        if (directory.isDirectory()) {
            // getting list of file paths
            File[] listFiles = directory.listFiles();

            // comprobamos si hay ficheros en el directorio
            if (listFiles.length > 0) {

                // recorremos los ficheros del directorio
                for (int i = 0; i < listFiles.length; i++) {

                    // cogemos la ruta del fichero
                    String filePath = listFiles[i].getAbsolutePath();
                    if (itsImageFromPoint(filePath, ids)) {
                        // comprobamos si is extensión esta soportada
                        if (IsSupportedFile(filePath)) {
                            // añade el path de la imagen al array
                            filePaths.add(filePath);
                        }
                    }
                }
            } else {
                // directorio de imagenes vacío
                Toast.makeText(
                        _context,
                        PHOTO_ALBUM
                                + "Error-Fichero de Imagenes vacio",
                        Toast.LENGTH_LONG).show();
            }

        } else {
            //encaso de que el directorio de imagenes no exista mostramos un alertDialog
            AlertDialog.Builder alert = new AlertDialog.Builder(_context);
            alert.setTitle("Error!");
            alert.setMessage(PHOTO_ALBUM
                    + " Directorio de Imagenes no valido");
            alert.setPositiveButton("OK", null);
            alert.show();
        }
        return filePaths;
    }

    /**
     * Comprueba las extensiones soportadas con la imagen a leer.
     *
     * @param filePath ruta de una imagen.
     * @return booleano indicando si la extensión de la imagen està soportada.
     */
    private boolean IsSupportedFile(String filePath) {
        String ext = filePath.substring((filePath.lastIndexOf(".") + 1),
                filePath.length());

        if (FILE_EXTN
                .contains(ext.toLowerCase(Locale.getDefault())))
            return true;
        else
            return false;

    }

    /**
     * Comprueba si una ruta de imagen pertenece al punto en el que estamos
     *
     * @param filePath ruta de una imagen.
     * @param ids      id el punto en el que nos encontramos.
     * @return booleano indicado si la ruta de la imagen pertenece al puncto que estamos buscando.
     */
    private boolean itsImageFromPoint(String filePath, ArrayList<String> ids) {
        String ext = filePath.substring((filePath.lastIndexOf("/") + 1),
                filePath.length());
        boolean correcto = false;
        for (String id : ids) {
            if (id.equals(ext.toLowerCase(Locale.getDefault()))) {
                correcto = true;
                break;
            }

        }
        return correcto;
    }
}
