#!/bin/bash

delete_files () {
    rm /execute_insert_hotfixOrg.sh
    rm /hotfixerBackup.sh
    rm /20220602T235959_XXXX_CreateColumnFamily.sh
    rm /execute_insert_hotfix.sh
    rm /getInconertVersion.sh
    rm /checkCassandraConnection.sh
    rm /getHotfixesInstalled.sh
    rm /processDependenciesStatus.sh
    rm /validateInconcertDependency.sh
    rm /insertDatos_hotfix.lua
    rm /cassandra_connection.lua
    rm /GetHotfixesInstalados.lua
    rm /cassandraConnection.txt
    rm /host.txt
    rm /fixesInstalled.txt
    rm /validVersion.txt
    rm /execBashHotfixFiles.sh
    rm /checkVersion.sh
    rm /dependenciesStatus.txt
    rm /hotfixerversion.txt
    rm /fixInstalledChecked.txt
    rm /getOS.sh
    rm /extractDependences.sh
    rm /dependenciesStatusOrg.txt
}

isLocalInstall=$( jq '.useLocalSource' /etc/inconcert/chef/data_bags/hotfixer/default.json)
if $isLocalInstall
then
    localPath=$(jq '.localPath' /etc/inconcert/chef/data_bags/hotfixer/default.json | sed 's/"//g')
    if [ ! -d "$localPath" ] 
    then
        echo "Directory $localPath DOES NOT exists."
        delete_files
        exit 0
    fi
   echo ""
   echo "========================================================================================================================================="
   echo "                                                         Installing from local files"
   echo "========================================================================================================================================="
   echo ""

fi

inconcertv=$(bash /getInconertVersion.sh)
os=$(bash /getOS.sh)

cd /

if $isLocalInstall
then
    cp $localPath/allHotfix.txt /tmp/hotfixes/"$inconcertv"_"$os"/allHotfix.txt
else
    server=$( jq '.sources.server' /etc/inconcert/chef/data_bags/hotfixer/default.json | sed 's/"//g')
	mkdir -p tmp/hotfixes/"$inconcertv"_"$os"
    wget -q http://$server/repo/hotfixes/"$inconcertv"_"$os"/allHotfix.txt -O /tmp/hotfixes/"$inconcertv"_"$os"/allHotfix.txt
fi

allHotfixPath="/tmp/hotfixes/"$inconcertv"_"$os"/allHotfix.txt"


if [ ! -f "/tmp/hotfixes/"$inconcertv"_"$os"/allHotfix.txt" ]
then
    echo "File \"allHotfix.txt\" DOES NOT exists."
    delete_files
    exit 0
fi

fixSize=$(wc -c /tmp/hotfixes/"$inconcertv"_"$os"/allHotfix.txt | awk '{print $1}')
if [[ "$fixSize" == "0" ]]
then
    echo "ERROR: Can not find source http://"$server"/repo/hotfixes/"$inconcertv"_"$os"/allHotfix.txt"
    echo
    delete_files
    exit 0
fi

hotfixes=$(tr '\n' ',' < /tmp/hotfixes/"$inconcertv"_"$os"/allHotfix.txt )

IFS=',' read -ra ADDR <<< "$hotfixes"

mkdir -p /tmp/hotfixes/"$inconcertv"_"$os"

# validate version
for val in "${ADDR[@]}";
do
    if $isLocalInstall
    then
        echo "========================================================================================================================================="
        echo "                          Hotfix source:  $localPath  "
        echo "========================================================================================================================================="
        echo
        cp $localPath/"$val".tar.gz  /tmp/hotfixes/"$inconcertv"_"$os"/"$val".tar.gz
    else
        echo "========================================================================================================================================="
        echo "                          Hotfix source:  http://"$server"/repo/hotfixes/"$inconcertv"_"$os" "
        echo "========================================================================================================================================="
        echo
        wget -q http://"$server"/repo/hotfixes/"$inconcertv"_"$os"/"$val".tar.gz -O /tmp/hotfixes/"$inconcertv"_"$os"/"$val".tar.gz
    fi

    if [ ! -f "/tmp/hotfixes/"$inconcertv"_"$os"/"$val".tar.gz" ]
    then
        echo "File \"$val.tar.gz\" DOES NOT exists."
        delete_files
        exit 0
    fi


    tar -xvf /tmp/hotfixes/"$inconcertv"_"$os"/"$val".tar.gz
    mv /"$val"/$val.conf /
    echo "valid hotfixer version for $val"
    bash /checkVersion.sh $val

    rm -f /$val.conf
    rm -rf /$val
done

echo ""
echo "========================================================================================================================================="
echo "                                                         RESULTS VALID VERSION"
echo "========================================================================================================================================="
echo ""
cat /validVersion.txt
echo ""

validVersion=$(< /validVersion.txt)

if [[ "$validVersion" == *"invalid"* ]]; then
    rm /validVersion.txt
    rm /checkVersion.sh
    rm /getInconertVersion.sh
    rm /hotfixerversion.txt
    echo "====================================================================================================================================="
    echo "                              Error al comprobar la compatibilidad de versiones del hotfixer"
    echo "====================================================================================================================================="
    delete_files
    exit 0
fi

# validate cassandra connection
bash /checkCassandraConnection.sh > /cassandraConnection.txt

isConnected=$(< /cassandraConnection.txt)

if [[ "$isConnected" == *"true"* ]]; then
   echo "Ok cassandra connection!"
else
    echo "========================================================================================================================================="
    echo "                                                   Cassandra connection fail!"
    echo "========================================================================================================================================="
    delete_files
    exit 0
fi


echo "Consult hotfixed installed"
bash /getHotfixesInstalled.sh > /fixesInstalled.txt

#validate depencences
for val in "${ADDR[@]}";
do
    tar -xvf /tmp/hotfixes/"$inconcertv"_"$os"/"$val".tar.gz
    mv /"$val"/$val.conf /
    echo "valid hotfixer version for $val"
    /bin/bash /extractDependences.sh $val $allHotfixPath

    rm -f /$val.conf
    rm -rf /$val
    /bin/bash /processDependenciesStatus.sh
    cat /fixInstalledChecked.txt
done
cp  /dependenciesStatus.txt  /dependenciesStatusOrg.txt

dependencesStatus=$(< /dependenciesStatus.txt)

if [[ "$dependencesStatus" == *"pending"* ]]; then
    echo "========================================================================================================================================="
    echo "                           Hay dependencias pendientes por instalar, no se procedera con la instalación"
    echo "========================================================================================================================================="
    rm /fixInstalledChecked.txt
    rm /dependenciesStatus.txt
    delete_files
    exit 0
fi

# install hotfixes
hostname > /host.txt
echo "create column family"
bash /20220602T235959_XXXX_CreateColumnFamily.sh
echo
cp  /execute_insert_hotfix.sh  /execute_insert_hotfixOrg.sh

for val in "${ADDR[@]}";
do

    echo 
    echo "========================================================================================================================================="
    echo "                                                          Installing hotfix $val"
    echo "========================================================================================================================================="
    tar -xvf /tmp/hotfixes/"$inconcertv"_"$os"/"$val".tar.gz
    mv /$val/$val.conf /
    mv /$val/files.tar.gz /
    cp -rf /$val/exec_files /
    rm -rf /$val/exec_files

    echo 
    echo "========================================================================================================================================="
    echo "                                                               Back-up files "
    echo "========================================================================================================================================="
    bash /hotfixerBackup.sh $val
   
    FILE=/files.tar.gz
    if test -f "$FILE"; then
       echo "======================================================================================================================================" 
       echo "                                                             Extract Files "
       echo "======================================================================================================================================="
       tar -xvf /files.tar.gz
       echo "End extraction!"
    fi
    bash /execBashHotfixFiles.sh

    echo "insert  cassandra hotfix $val"
    cp /execute_insert_hotfixOrg.sh  /execute_insert_hotfix.sh
    sed -i s/#hotfix#/$val/g /execute_insert_hotfix.sh
    /bin/bash /execute_insert_hotfix.sh >  /resultInsert.txt
    cat  /resultInsert.txt
    rm -r  /tmp/hotfixes/"$inconcertv"_"$os"/$val.tar.gz
    rm /$val.conf
    rm /files.tar.gz
    rm -rf /exec_files
    rm -rf /$val
done

delete_files