package com.ejie.ad74a.util.pif;

import java.io.File;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UtilesPath {
	private static final Logger logger = LoggerFactory.getLogger(UtilesPath.class);

	/**
	 * 
	 */
	private UtilesPath() {

	}

	/**
	 * A partir de un path completo, extrae el nombre (y extensiÃ³n) del fichero.
	 * 
	 * @param path       Path del cual extraer el nombre del fichero.
	 * @param sep        Separador usado en el path.
	 * @param bExtension Si true, el nombre contendrÃ¡ la extensiÃ³n. Si false, el
	 *                   nombre devuelto no tendrÃ¡ la extensiÃ³n.
	 * @return String con el nombre del fichero. Dicho nombre tendrÃ¡ la extensiÃ³n
	 *         o no segÃºn el parÃ¡metro "bExtension".
	 */
	public static String obtenerNombreDelPath(String path, String sep, boolean bExtension) {
		String nombre = UtilesPath.descomponerPathYNombre(path, sep)[1];
		if (!bExtension) {
			nombre = UtilesPath.quitarExtension(nombre);
		}
		return nombre;
	}

	/**
	 * Descompone un path de un fichero, en 2 partes: la ruta en sÃ­ y el nombre
	 * (con extension) del fichero
	 * 
	 * @param path Path a descomponer
	 * @param sep  Separador usado en el path
	 * @return Array de 2 Strings. El 1Âº tendrÃ¡ la ruta y el 2Âº el nombre del
	 *         fichero.
	 */
	public static String[] descomponerPathYNombre(String path, String sep) {
		String[] retorno = new String[2];
		if (sep == null) {
			sep = File.separator;
		}
		int i = path.lastIndexOf(sep);
		if (i < 0) {
			// No hay ruta, solo nombre de fichero
			UtilesPath.logger.error("No hay ruta");
			retorno[0] = "";
			retorno[1] = path;
		} else {
			// La ruta incluye barra al final
			retorno[0] = path.substring(0, i + 1);
			retorno[1] = path.substring(i + 1);
		}
		return retorno;
	}

	/**
	 * Dada una ruta de fichero, devuelve dicha ruta, pero quitando la extensiÃ³n
	 * que pudiera tener.
	 * 
	 * @param ruta Cadena con la ruta (o nombre) de un fichero.
	 * @return Cadena con la misma ruta, pero sin extensiÃ³n.
	 */
	public static String quitarExtension(String ruta) {
		String ret = ruta;
		int posPunto = ret.lastIndexOf(".");
		if (posPunto >= 0) {
			ret = ret.substring(0, posPunto);
		}
		return ret;
	}

	/**
	 * Obtiene la extensiÃ³n de un fichero.
	 * 
	 * @param ruta Cadena con la ruta o nombre del fichero cuya extension se quiere
	 *             obtener.
	 * @return Cadena con la extensiÃ³n del fichero. Si el fichero no tiene
	 *         extensiÃ³n, devuelve cadena vacia. Si la ruta es null o cadena vacia,
	 *         tambiÃ©n devuelve cadena vacia.
	 */
	public static String obtenerExtension(String ruta) {
		String extension = "";
		if (ruta != null) {
			int posPunto = ruta.lastIndexOf(".");
			if (posPunto >= 0) {
				extension = ruta.substring(posPunto + 1);
			}
		}
		return extension;
	}
}
