#!/bin/bash

# DIRECTORIO_ORIGEN="./FS_AGIP" # Cambia esto al directorio donde están los .rar
# DIRECTORIO_HISTORICO="./historico" # Carpeta donde se moverán los .rar procesados
# DIRECTORIO_ARCHIVO="./DB_FS" # Carpeta donde se moverán los archivos .txt extraídos
# LOG_FILE="./logs/go-app-proceso.log"

DIRECTORIO_ORIGEN="/mnt/ftp_agip" # Cambia esto al directorio donde están los .rar
DIRECTORIO_HISTORICO="/mnt/ftp_agip/Historico" # Carpeta donde se moverán los .rar procesados
DIRECTORIO_ARCHIVO="/mnt/DB_FS/AGIP/TXT" # Carpeta donde se moverán los archivos .txt extraídos
LOG_FILE="/mnt/DB_FS/AGIP/LOG_AGIP.log"
# LOG_FILE="/var/www/html/AGIP/LOG_AGIP.log"


EMAIL_TO="emanuel.mangani@vicentelopez.gov.ar"  # Correo al que se enviará el email
EMAIL_CC=("fernanda.rousseau@vicentelopez.gov.ar")  # Lista de correos

# Crear el directorio de logs si no existe
mkdir -p "$(dirname "$LOG_FILE")"
# Crear el archivo de log si no existe
# touch "$LOG_FILE"
# Función para registrar mensajes en el log
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# Función para enviar un email
funcMail() {
    local message="$1"
    local cc=""

    (
    sleep 1
    echo "EHLO vicentelopez.gov.ar"
    sleep 1
    echo "MAIL FROM: no-reply@vicentelopez.gov.ar"
    sleep 1
    echo "RCPT TO: $EMAIL_TO"
    for email in "${EMAIL_CC[@]}"; do
        sleep 1
        echo "RCPT TO: $email"
    done
    # sleep 1
    # echo "RCPT TO: ext.juan.campagna@vicentelopez.gov.ar"
    sleep 1
    echo "DATA"
    sleep 1
    echo "Subject: Proceso de Procesamiento de Archivos AGIP"
    echo "To: $EMAIL_TO"
    for mail in "${EMAIL_CC[@]}"; do
        cc="$cc $mail;"
    done
    echo "Cc: $cc"
    echo ""
    echo "$message"
    echo "."
    sleep 1
    echo "QUIT"
    ) | telnet prd-mod-smtp02 25
}

# Función para borrar archivos en DIRECTORIO_ARCHIVO
borrar_archivos_directorio_archivo() {
    # Verificar si el directorio existe
    if [[ -d "$DIRECTORIO_ARCHIVO" ]]; then
        log "Eliminando archivos en: $DIRECTORIO_ARCHIVO"
        if rm -f "$DIRECTORIO_ARCHIVO"/* 2>/dev/null; then
            log "Archivos eliminados en: $DIRECTORIO_ARCHIVO"
            return 0 # Éxito
        else
            log "Error - No se pudieron eliminar los archivos en: $DIRECTORIO_ARCHIVO"
            return 1 # Error
        fi
    else
        # log "Error - El directorio $DIRECTORIO_ARCHIVO no existe. Deteniendo ejecución."
        return 1 # Error si el directorio no existe
    fi
}

mover_archivos_directorio_origen() {
    # Verificar si el directorio de origen existe
    if [[ -d "$DIRECTORIO_ORIGEN" ]]; then
        log "Moviendo archivos .rar, .zip, .txt y .TXT de: $DIRECTORIO_ORIGEN a $DIRECTORIO_HISTORICO"
        
        # Crear el directorio de destino si no existe
        mkdir -p "$DIRECTORIO_HISTORICO"
        
        # Inicializar variables de estado
        local moved_any=false
        local error_occurred=false

        # Intentar mover archivos para cada extensión
        for ext in rar zip txt TXT; do
            if compgen -G "$DIRECTORIO_ORIGEN"/*.$ext > /dev/null; then
                if mv "$DIRECTORIO_ORIGEN"/*.$ext "$DIRECTORIO_HISTORICO"/ 2>/dev/null; then
                    moved_any=true
                else
                    log "Error al mover archivos .$ext de $DIRECTORIO_ORIGEN a $DIRECTORIO_HISTORICO"
                    error_occurred=true
                fi
            else
                log "No se encontraron archivos .$ext en $DIRECTORIO_ORIGEN para mover."
            fi
        done

        # Evaluar el resultado final
        if [[ "$error_occurred" == true ]]; then
            log "Error - Ocurrieron problemas al mover algunos archivos de $DIRECTORIO_ORIGEN a $DIRECTORIO_HISTORICO"
            return 1 # Error si al menos un movimiento falló
        elif [[ "$moved_any" == true ]]; then
            log "Archivos .rar, .zip, .txt y/o .TXT movidos exitosamente de $DIRECTORIO_ORIGEN a $DIRECTORIO_HISTORICO"
            return 0 # Éxito si al menos un archivo fue movido
        else
            log "No se encontraron archivos .rar, .zip, .txt o .TXT en $DIRECTORIO_ORIGEN para mover."
            return 0 # No hay error, simplemente no hay archivos para mover
        fi
    else
        log "Error - El directorio $DIRECTORIO_ORIGEN no existe."
        return 1 # Error si el directorio de origen no existe
    fi
}

copiar_archivos_directorio_origen_txt() {
    # Verificar si el directorio de origen existe
    if [[ -d "$DIRECTORIO_ORIGEN" ]]; then
        log "Copiando archivos .txt y .TXT de: $DIRECTORIO_ORIGEN a $DIRECTORIO_ARCHIVO con extensión .TXT"
        
        # Crear el directorio de destino si no existe
        mkdir -p "$DIRECTORIO_ARCHIVO"
        
        # Inicializar variables de estado
        local copied_any=false
        local error_occurred=false

        # Procesar archivos .txt y .TXT
        for file in "$DIRECTORIO_ORIGEN"/*.txt "$DIRECTORIO_ORIGEN"/*.TXT; do
            if [[ -f "$file" ]]; then
                # Obtener el nombre base del archivo y cambiar la extensión a .TXT
                local base_name=$(basename "$file" | sed 's/\.[tT][xX][tT]$/.TXT/')
                if cp "$file" "$DIRECTORIO_ARCHIVO/$base_name" 2>/dev/null; then
                    copied_any=true
                    log "Archivo $file copiado como $DIRECTORIO_ARCHIVO/$base_name"
                else
                    log "Error al copiar el archivo $file a $DIRECTORIO_ARCHIVO/$base_name"
                    error_occurred=true
                fi
            fi
        done

        # Evaluar el resultado final
        if [[ "$error_occurred" == true ]]; then
            log "Error - Ocurrieron problemas al copiar algunos archivos de $DIRECTORIO_ORIGEN a $DIRECTORIO_ARCHIVO"
            return 1 # Error si al menos una copia falló
        elif [[ "$copied_any" == true ]]; then
            log "Archivos .txt y/o .TXT copiados exitosamente a $DIRECTORIO_ARCHIVO con extensión .TXT"
            return 0 # Éxito si al menos un archivo fue copiado
        else
            log "No se encontraron archivos .txt o .TXT en $DIRECTORIO_ORIGEN para copiar."
            return 0 # No hay error, simplemente no hay archivos para copiar
        fi
    else
        log "Error - El directorio $DIRECTORIO_ORIGEN no existe."
        return 1 # Error si el directorio de origen no existe
    fi
}


# PROCESOS 



# Llamar a la función borrar_archivos_DIRECTORIO_ARCHIVO
# borrar_archivos_directorio_archivo || exit 1 # Detener el script si ocurre un error al borrar archivos
borrar_archivos_directorio_archivo
if [[ $? -eq 1 ]]; then
    log "Error - No se pudieron eliminar los archivos en: $DIRECTORIO_ARCHIVO"
    funcMail "Error - No se pudieron eliminar los archivos en: $DIRECTORIO_ARCHIVO"
    exit 1 # Detener el script si ocurre un error al borrar archivos
fi


log "Procesando archivos .rar"
cd /var/www/html/procesos-agip/
./go-unrar-linux >> "$LOG_FILE" 2>&1 

wait

if [[ $? -eq 0 ]]; then
    log "go-unrar-linux se ejecutó correctamente."
else
    log "Error - go-unrar-linux falló durante la ejecución."
    exit 1 # Detener el script si el .exe falló
fi


# Llamar a la función copiar_mover_archivos_DIRECTORIO_ORIGEN
# log "Copiando archivos de: $DIRECTORIO_ORIGEN a $DIRECTORIO_ARCHIVO"
copiar_archivos_directorio_origen_txt
if [[ $? -eq 1 ]]; then
    log "Error - No se pudieron copiar los archivos de $DIRECTORIO_ORIGEN a $DIRECTORIO_ARCHIVO"
    funcMail "Error - No se pudieron copiar los archivos de $DIRECTORIO_ORIGEN a $DIRECTORIO_ARCHIVO"
    exit 1 # Detener el script si ocurre un error al mover archivos
fi


# Llamar a la función mover_archivos_DIRECTORIO_ORIGEN
# log "Moviendo archivos de: $DIRECTORIO_ORIGEN a $DIRECTORIO_HISTORICO"
mover_archivos_directorio_origen
if [[ $? -eq 1 ]]; then
    log "Error - No se pudieron mover los archivos de $DIRECTORIO_ORIGEN a $DIRECTORIO_HISTORICO"
    funcMail "Error - No se pudieron mover los archivos de $DIRECTORIO_ORIGEN a $DIRECTORIO_HISTORICO"
    exit 1 # Detener el script si ocurre un error al mover archivos
fi

# ejecuto el archivo go-app-proceso.exe
log "Ejecutando go-proceso-linux"
cd /var/www/html/procesos-agip/
./go-proceso-linux >> "$LOG_FILE" 2>&1 

# Esperar a que termine el proceso (opcional, ya que Bash espera por defecto)
wait


# Verificar el código de salida del .exe
if [[ $? -eq 0 ]]; then
    log "El proceso go-proceso-linux se ejecutó correctamente."
    funcMail "El proceso se ejecuto correctamente. Ver logs para mas detalles."
else
    log "Error - go-proceso-linux falló durante la ejecución."
    funcMail "El proceso fallo. Ver logs para más detalles."
    exit 1 # Detener el script si el .exe falló
fi

