#!/bin/sh

SETTINGS_FILE="/var/efw/external-backups/settings"
LOG_FILE="/var/log/external-backups.log"

# Caminho fixo dos .conf gerados automaticamente
FTP_CONF="/var/efw/external-backups/ftp.conf"
SFTP_CONF="/var/efw/external-backups/sftp.conf"
SMB_CONF="/var/efw/external-backups/smb.conf"
MEGA_CONF="/var/efw/external-backups/mega.conf"

# Verifica o arquivo settings
if [[ ! -f "$SETTINGS_FILE" ]]; then
    echo "Arquivo de configuração não encontrado: $SETTINGS_FILE"
    exit 1
fi

# Carrega variáveis KEY=VALUE
while IFS='=' read -r key value; do
    [[ -z "$key" ]] && continue
    [[ "$key" =~ ^# ]] && continue

    key=$(echo "$key" | tr -d ' ')
    value=$(echo "$value" | sed 's/"//g' | sed "s/'//g")

    export "$key=$value"
done < "$SETTINGS_FILE"

#Convrte as senhas em base64
if [ ! -z $FTP_PASSWORD ]; then
FTP_PASSWORD_OBS=$(rclone obscure $FTP_PASSWORD)
fi

if [ ! -z $SFTP_PASSWORD ]; then
SFTP_PASSWORD_OBS=$(rclone obscure $SFTP_PASSWORD)
fi

if [ ! -z $MEGA_PASSWORD ]; then
MEGA_PASSWORD_OBS=$(rclone obscure $MEGA_PASSWORD)
fi

if [ ! -z $SMB_PASSWORD ]; then
SMB_PASSWORD_OBS=$(rclone obscure $SMB_PASSWORD)
fi

# ---------------- Funções ------------------

#
# FTP
#
ftp() {

    if [[ "$FTP_ENABLED" == "on" ]]; then
        echo "[FTP]
type = ftp
host = $FTP_HOST
user = $FTP_USER
port = $FTP_PORT
pass = $FTP_PASSWORD_OBS" > "$FTP_CONF" #Senha em base64

        echo "$FTP_CRON_MIM $FTP_CRON_HOR $FTP_CRON_DIA_MES $FTP_CRON_MES $FTP_CRON_DIA_SEM /usr/local/bin/external-backups --ftp-sendnow" \
        > /etc/cron.d/backup-ftp
        /etc/init.d/fcron restart &>/dev/null

    else
        rm -f "$FTP_CONF"
        rm -f /etc/cron.d/backup-ftp
        /etc/init.d/fcron restart &>/dev/null
    fi
}

#
# SFTP
#
sftp() {

    if [[ "$SFTP_ENABLED" == "on" ]]; then
        echo "[SFTP]
type = sftp
host = $SFTP_HOST
user = $SFTP_USER
port = $SFTP_PORT
pass = $SFTP_PASSWORD_OBS" > "$SFTP_CONF" #Senha em base64

        echo "$SFTP_CRON_MIM $SFTP_CRON_HOR $SFTP_CRON_DIA_MES $SFTP_CRON_MES $SFTP_CRON_DIA_SEM /usr/local/bin/external-backups --sftp-sendnow" \
        > /etc/cron.d/backup-sftp
        /etc/init.d/fcron restart &>/dev/null

    else
        rm -f "$SFTP_CONF"
        rm -f /etc/cron.d/backup-sftp
        /etc/init.d/fcron restart &>/dev/null
    fi
}

#
# SMB
#
smb() {

    if [[ "$SMB_ENABLED" == "on" ]]; then
        echo "[SMB]
type = smb
host = $SMB_HOST
user = $SMB_USER
pass = $SMB_PASSWORD_OBS
domain = $SMB_DOMAIN" > "$SMB_CONF" #Senha em base64

        echo "$SMB_CRON_MIM $SMB_CRON_HOR $SMB_CRON_DIA_MES $SMB_CRON_MES $SMB_CRON_DIA_SEM /usr/local/bin/external-backups --smb-sendnow" \
        > /etc/cron.d/backup-smb
        /etc/init.d/fcron.restart &>/dev/null

    else
        rm -f "$SMB_CONF"
        rm -f /etc/cron.d/backup-smb
        /etc/init.d/fcron.restart &>/dev/null
    fi
}

#
# MEGA
#
mega() {

    if [[ "$MEGA_ENABLED" == "on" ]]; then
        echo "[MEGA]
type = mega
user = $MEGA_USER
pass = $MEGA_PASSWORD_OBS" > "$MEGA_CONF"

        echo "$MEGA_CRON_MIM $MEGA_CRON_HOR $MEGA_CRON_DIA_MES $MEGA_CRON_MES $MEGA_CRON_DIA_SEM /usr/local/bin/external-backups --mega-sendnow" \
        > /etc/cron.d/backup-mega
        /etc/init.d/fcron restart &>/dev/null

    else
        rm -f "$MEGA_CONF"
        rm -f /etc/cron.d/backup-mega
        /etc/init.d/fcron restart &>/dev/null
    fi
}

# ---------------- Envio imediato ------------------

ftp_sendnow() {
    if [[ "$FTP_ENABLED" == "on" ]]; then
        rclone sync "/var/backups/" FTP:"$FTP_DIR" --config "$FTP_CONF" --stats-one-line --log-file="$LOG_FILE"
    else
        rclone copy "/var/backups/" FTP:"$FTP_DIR" --config "$FTP_CONF" --stats-one-line --log-file="$LOG_FILE"
    fi
}

sftp_sendnow() {
    if [[ "$SFTP_ENABLED" == "on" ]]; then
        rclone sync "/var/backups/" SFTP:"$SFTP_DIR" --config "$SFTP_CONF" --stats-one-line --log-file="$LOG_FILE"
    else
        rclone copy "/var/backups/" SFTP:"$SFTP_DIR" --config "$SFTP_CONF" --stats-one-line --log-file="$LOG_FILE"
    fi
}

mega_sendnow() {
    if [[ "$MEGA_ENABLED" == "on" ]]; then
        rclone sync "/var/backups/" MEGA:"$MEGA_DIR" --config "$MEGA_CONF" --stats-one-line --log-file="$LOG_FILE"
    else
        rclone copy "/var/backups/" MEGA:"$MEGA_DIR" --config "$MEGA_CONF" --stats-one-line --log-file="$LOG_FILE"
    fi
}

smb_sendnow() {
    if [[ "$SMB_ENABLED" == "on" ]]; then
        rclone sync "/var/backups/" SMB:"$SMB_DIR" --config "$SMB_CONF" --stats-one-line --log-file="$LOG_FILE"
    else
        rclone copy "/var/backups/" SMB:"$SMB_DIR" --config "$SMB_CONF" --stats-one-line --log-file="$LOG_FILE"
    fi
}


# ------------------- Função INCLUDE (merge) -----------------------

include() {

#!/bin/bash

EDITADO="/var/efw/external-backups/include"
FINAL="/usr/lib/efw/backup/include.system"
NOVO_FINAL="/usr/lib/efw/backup/include.system.new"

# Cria editado se não existir
touch "$EDITADO"

# Ordena temporariamente para usar comm
TMP_SYS=$(mktemp)
TMP_EDT=$(mktemp)

sort "$FINAL" > "$TMP_SYS"
sort "$EDITADO" > "$TMP_EDT"

# Linhas do sistema = as que estão no final, mas não no editado
SYS_LINES=$(comm -23 "$TMP_SYS" "$TMP_EDT")

# Gera novo final
{
    echo "$SYS_LINES"
    cat "$EDITADO"
} > "$NOVO_FINAL"

# Substitui
mv "$NOVO_FINAL" "$FINAL"

rm -f "$TMP_SYS" "$TMP_EDT"

echo "Novo arquivo final atualizado em: $FINAL"

}


# ---------------- Tratamento de argumentos ------------------

if [[ "$1" =~ ^--.* ]]; then
    func="${1#--}"

    if declare -f "$func" >/dev/null; then
        echo "Executando função direta: $func"
        $func
        exit 0
    else
        echo "Erro: função '$func' não existe."
        exit 1
    fi
fi

# ---------------- Execução dinâmica (configuração automática) ------------------

for var in FTP SFTP SMB MEGA; do
    enabled_var="${var}_ENABLED"
    func=$(echo "$var" | tr '[:upper:]' '[:lower:]')

    if [[ "${!enabled_var}" == "on" ]]; then
        echo ">> Habilitado: $var"
        $func
    else
        echo ">> Desabilitado ou inexistente: $var — removendo"
        $func
    fi
done

