#!/bin/bash

#-----------------------------------------------------------------
# Conversión de ficheros .TAP de Oric a .TSX para ser cargados 
# desde un maxduino o similar. 
#
# Instrucciones: Colocar los ficheros .TAP dentro de la carpeta TAP
# 
# Al ejecutar este script se creará convertirán los .TAP a .TSX,  
# dejándose en la carpetas TSX con el mismo nombre.
#
# Si los ficheros destino ya existiesen no se volverán a convertir,
# excepto si se llama al script con el parámetro -f
#-----------------------------------------------------------------



function ayuda(){

    echo "Conversión de ficheros .TAP de Oric a .TSX para ser cargados desde un maxduino o similar."    
    echo
    echo "Modo de empleo: calorico.sh [opciones]"
    echo    
    echo "Opciones:"
    echo
    echo "-h , --help: "
    echo "     Presenta esta ayuda."
    echo "-v , --version: "
    echo "     Imprime la versión del script."    
    echo "-f , --forzar: "
    echo "     Si se añade se sobrescribirán los ficheros destinos aunque ya existan."    
    echo
    echo "Si la conversión de se procesa sin errores se puede ver el resultado en el fichero calorico.log"     
    echo
    echo "Instrucciones:"
    echo
    echo "Colocar los ficheros .TAP a convertir dentro de la carpeta TAP. Al ejecutar este script se convertirán los .TAP a .TSX,"
    echo "dejándose los ficheros convertidos en la carpeta TSX con el mismo nombre. Se pueden crear subcarpetas dentro de "
    echo "la carpeta TAP, cuya estructura también será replicada en las carpetas destino."
    echo 
    echo "Si los ficheros destino ya existiesen no se volverán convertir, excepto si se llama al script con el parámetro -f"       
    echo
    echo "Ejemplos:"
    echo
    echo "./calorico.sh"    
    echo
    echo "     Convertirá los archivos .TAP a ficheros .TSX. Si se encuentra que el fichero destino ya existe no realizará "
    echo "     la conversión del fichero origen del mismo nombre."
    echo
    echo "./calorico.sh -f"    
    echo
    echo "     Igual que en el ejemplo anterior, pero en este caso convertirá los ficheros origen aunque haya otros en destino "
    echo "     con el mismo nombre, sobrescribiéndolos."
    echo    
    exit
}

ver="0.1.0"
opciones=0
convertidos=0
no_convertidos=0
tipo="tsx"

# Control de los argumentos de entrada


for arg in "$@" #en todos los argumentos que han entrado
do    
        if [ "$arg" != "--help" ]    && [ "$arg" != "-h" ]  &&
           [ "$arg" != "--forzar" ]  && [ "$arg" != "-f" ]  &&
           [ "$arg" != "--version" ] && [ "$arg" != "-v" ] ; then            
           echo "Parámetro erróneo:  $arg" 
           echo
           ayuda
           exit
        else   
            if [ "$arg" == "--help" ] || [ "$arg" == "-h" ]; then
                ayuda=true            
                ((opciones += 1))
            elif [ "$arg" == "--forzar" ] || [ "$arg" == "-f" ]; then
                forzar=true      
                ((opciones += 1))
            elif [ "$arg" == "--version" ] || [ "$arg" == "-v" ]; then
                version=true       
                ((opciones += 1))            
           fi     
        fi                
done           
        
if [ "$opciones" -gt 1 ]; then
        echo "No ponga más de una opción a la vez"
        exit
elif [ "$ayuda" == true ]; then
    if [ $# -eq 1 ]; then
           ayuda
    else
       echo "Si quiere ver la ayuda ponga solo la opción -h o --help"
       exit        
    fi
elif [ "$version" == true ]; then
    if [ $# -eq 1 ]; then
       echo "Versión $ver"
       exit
    else
          echo "Si quiere ver la versión ponga solo la opción -v o --version"
          exit        
    fi
fi


# Validaciones adicionales

if ([ ! -d "TAP" ]); then
        echo "No existe el directorio TAP"
        exit
fi


# Empezamos con la conversión 

# Ficheros temporales

log_convertidos="/tmp/calorico_log_convertidos.txt"
log_no_convertidos="/tmp/calorico_log_no_convertidos.txt"
ficheros="/tmp/calorico_ficheros.txt"

log_proceso="${0//.sh/.log}"
rm -f $log_proceso
touch $log_proceso $log_convertidos $log_no_convertidos $ficheros

echo "**********************************************" >> $log_proceso
echo "  Conversión de ficheros .tap de ORIC a .$tipo" >> $log_proceso
echo "**********************************************" >> $log_proceso
echo " " >> $log_proceso

# Buscamos ficheros .TAP dentro de la estructura de carpetas que cuelga de la carpeta TAP

if [ -d "./TAP" ] ; then
    find ./TAP -name "*.tap" -or -name "*.TAP" -not -name ".*" -not -name "." | egrep -v "\.rtfd/|\.app/|\.lpdf/|\.workflow/" >>  $ficheros
fi

# Se convierten todos los .TAP encontrados a .TSX

while IFS= read -r fichero_origen
do

  # Nos quedamos con el nombre del fichero .TAP sin la extensión
  
  nombre=`basename "${fichero_origen%.*}"`
  
  # Creamos la ruta y fichero destino cambiando la carpeta /TAP/,
  # por /TSX/, y la extensión de los ficheros .TAP o  a .TSX
  
  fich_temp1="${fichero_origen//\/TAP\//\/TSX\/}"      
  fich_temp2="${fich_temp1//.TAP/.$tipo}"
  fichero_destino="${fich_temp2//.tap/.$tipo}"
        
    
  # Si el fichero ya ha sido convertido antes no se vuelve a convertir  
  # a menos que se haya pasado el parámetro -f (forzar)
     
  if [ -f "$fichero_destino" -a  "$forzar" != true ]; then  
  
    # Aumentamos el contador de ficheros no convertidos 
    
    ((no_convertidos += 1))
    
    # Reflejamos en el log que no realizamos la conversión de ese fichero
    
    echo "Ya existe $fichero_destino. No se crea." >> $log_no_convertidos
    
  else
  
    # Comprobamos si ya existe la carpeta destino, y en caso de 
    # que no exista la creamos, incluidas carpetas de niveles 
    # superiores que tampoco existan 
    
    directorio_destino="${fichero_destino%/*}"   
    if [ ! -d "$directorio_destino" ]; then        
      mkdir -p "$directorio_destino"
    fi    
    
    # Realizamos al conversión del fichero .wav a .tsx
        
    php oric2tsx.php "$fichero_origen" "$fichero_destino"
        
    # Aumentamos el contador de ficheros convertidos 
    
    ((convertidos += 1))
    
    # Reflejamos en el log el fichero convertido    
    
    echo "Creado $fichero_destino"  >> $log_convertidos      
  fi  
  
done < $ficheros

#Confeccionamos el log final con el resultado

if [ "$convertidos" -ne "0" ]; then  
    cat $log_convertidos >> $log_proceso
    echo " "   >> $log_proceso
fi

if [ "$no_convertidos" -ne "0" ]; then  
    cat $log_no_convertidos >> $log_proceso
    echo " "   >> $log_proceso
fi    


# Reflejamos en el log el número de ficheros que se han convertido

echo "Número de archivos convertidos: $convertidos"         >> $log_proceso
echo "Número de archivos no convertidos: $no_convertidos"   >> $log_proceso

echo
echo "Conversión finalizada. Puede ver el resultado del proceso en calorico.log"

# Borramos ficheros temporales

rm -f $ficheros $log_convertidos $log_no_convertidos
