#!/bin/bash

# Verificamos los argumentos:
help() {
    echo "#> ${0}: Script que muestra información sobre los logs del sistema y Vitalinux (por defecto, espacio en /var/log)"
    echo ">> Opcionalmente pasar parámetros para indicar que deseamos hacer:"
    echo -e "\t'-d': Directorio. Ruta del directorio del que mostrar el espacio ocupado por los logs (por defecto /var/log)"
    echo -e "\t'-v': Directorio Vitalinux. Ruta del directorio de los logs de Vitalinux (por defecto /var/log/vitalinux)"
    echo -e "\t'-i': Vitalinux. Muestra información sobre los logs del sistema Vitalinux (por defecto, espacio)"
    echo -e "\t'-j': Journal. Muestra información en tiempo real sobre los logs mediante journal (equivalente a tail -f)"
    echo -e "\t'-e': Journal Error. Muestra información de los logs de error de journal (journalctl -p err: Ver solo mensajes de error o superiores)"
    echo -e "\t'-t': Journal Time. Número de horas desde que se quieren ver los logs de journal (journalctl --since '1 hour ago')"
    echo -e "\t'-s': Journal Service. Información de los logs de un servicio específico (journalctl -u nombre_servicio)"
    echo -e "\t'-l': Systemclt lista servicios. Información de todos los servicios activos en el sistema gestionados por systemd (systemctl list-units --type=service --state=running)"
    echo -e "\t'-c': Log Vitalinux Centro. Información de los logs generados por el paquete de centro"
    echo "#> Uso: $0 [-d directorio]"
    echo -e "Ej. ${0} '-d' '/var/log/vitalinux'"
    exit 1
}

function check_exit_fichero() {
    [[ ! -f "${FICHERO}" ]] && \
    echo "Error: El archivo '${FICHERO}' no existe." && \
    help
}

function check_exit_directorio() {
    [[ ! -f "${DIR_LOG}" ]] && \
    echo "Error: El directorio '${DIR_LOG}' no existe." && \
    help
}

[[ "${1}" == "-h" || "${1}" == "--help" ]] && help

DIR_LOG="/var/log"
INFO="false"
JOURNAL="false"
ERROR="false"
LISTAR="false"
CENTRO="false"
while getopts :hd:vijelct:s: OPT; do
    case "${OPT}" in
        d) DIR_LOG="${OPTARG}" ;;
        v) DIR_LOG="/var/log/vitalinux"
        check_exit_directorio ;;
        i) INFO="true" ;;
        j) JOURNAL="true" ;;
        e) ERROR="true" ;;
        t) TIME="${OPTARG}" ;;
        s) SERVICIO="${OPTARG}" ;;
        l) LISTAR="true" ;;
        c) CENTRO="true" ;;
        \?) help ;;
        :) help ;;
        h | *) help ;;
    esac
done

if "${CENTRO}" ; then
    FICHERO="/var/log/vitalinux/vx-conf-pre-centro.log"
    check_exit_fichero
    less -R "${FICHERO}"
    exit 0
fi

if "${LISTAR}" ; then
    systemctl list-units --type=service --state=running
    exit 0
fi

if "${JOURNAL}" ; then
    if [[ "${SERVICIO}" ]] ; then
        # journalctl -u nombre_servicio: Ver los logs de un servicio específico (ej. nginx, docker).
        journalctl -u "${SERVICIO}"
        exit 0
    fi
    if [[ "${TIME}" ]] ; then
        # journalctl --since "1 hour ago": Ver logs desde hace una hora.
        journalctl --since "${TIME} hour ago"
        exit 0
    fi
    if "${ERROR}" ; then
        # journalctl -p err: Ver solo mensajes de error o superiores.
        journalctl -p err
        exit 0
    fi
    # journalctl -f: Seguir los logs en tiempo real (equivalente al tail -f)
    journalctl -f
    exit 0
fi
if "${INFO}" ; then
    lnav "${DIR_LOG}"
    exit 0
fi
ncdu "${DIR_LOG}"
exit 0