#!/bin/bash
CUR_DIR=`pwd`
echo "Checking the Desired Files are present or not..."

if [ ! -f /root/Cav*.bin ]; then
    missing_files+=("/root/Cav*.bin")
fi
if [ ! -f /root/cav_licence ]; then
    missing_files+=("/root/cav_licence")
fi
if [ ! -f /root/ServerInstaller.sh ]; then
    missing_files+=("/root/ServerInstaller.sh")
fi



if [ ${#missing_files[@]} -eq 0 ]; then
    echo "All required files are present. Moving forward."
else
    echo "The following files are missing:"
    for file in "${missing_files[@]}"; do
        echo "$file"
    done
    exit 1
fi

# Define the username and password
USERNAME="cavisson"
PASSWORD="cavisson"
PASSWORD_ROOT="cavisson"
echo "root:$PASSWORD_ROOT" | chpasswd
echo "User root is created and password is cavisson."
# Create the user with adduser (this will not prompt for password)
adduser --disabled-password --gecos "" $USERNAME

# Set the password using chpasswd (username:password format)
echo "$USERNAME:$PASSWORD" | chpasswd

# Inform the user
echo "User '$USERNAME' is created and password is set."
usermod -aG sudo cavisson
mkdir -p /root/test/add_packages && cd test
cp  ../Cav*.bin . && bash Cav*.bin --noexec
cd add_packages && cp ../additional_rpms.Ubuntu2004_64.bin . && bash additional_rpms.Ubuntu2004_64.bin  --noexec && ls -ltrh
tar -xvzf packages.tar.gz
#Install Packages 
if [ -d /etc/mail/tls ];then
   cd /etc/mail/tls >> /dev/null 2>&1
   openssl dsaparam -out sendmail-common.prm 2048 >> /dev/null 2>&1
   chmod 777 sendmail-common.prm >> /dev/null 2>&1
   cd - >> /dev/null 2>&1
else
   echo "tls directory does not exist" >> /dev/null 2>&1
   mkdir -p /etc/mail/tls
   cd /etc/mail/tls >> /dev/null 2>&1
   openssl dsaparam -out sendmail-common.prm 2048 >> /dev/null 2>&1
   chmod 777 sendmail-common.prm >> /dev/null 2>&1
   cd - >> /dev/null 2>&1
fi

cd packages
  dpkg --remove --force-remove-reinstreq mailutils >> /dev/null 2>&1
  dpkg --remove --force-remove-reinstreq postfix >> /dev/null 2>&1
  dpkg --remove --force-remove-reinstreq libwebkit2gtk-4.0-37-gtk2 >> /dev/null 2>&1
  dpkg --remove --force-remove-reinstreq samba-common-bin >> /dev/null 2>&1
  dpkg --remove --force-remove-reinstreq python-samba >> /dev/null 2>&1
  dpkg --remove --force-remove-reinstreq cups-bsd >> /dev/null 2>&1
  dpkg --purge snapd >> /dev/null 2>&1
  dpkg -l | grep libnss-mdns
  if [ $? -eq 0 ]; then
  dpkg --purge libnss-mdns >> /dev/null 2>&1
  fi
  dpkg -l | grep avahi-utils
  if [ $? -eq 0 ]; then
   dpkg --purge avahi-utils >> /dev/null 2>&1
    fi
  dpkg -l | grep avahi-daemon
  if [ $? -eq 0 ]; then
   dpkg --purge avahi-daemon >> /dev/null 2>&1
  fi

  dpkg -iG e2fslibs* >>/dev/null 2>&1
  dpkg -iG zlib1g* >> /dev/null 2>&1
  dpkg -iG libicu55* icu-devtools* libicu-dev* >> /dev/null 2>&1
  #install packages without apport.
  dpkg -iG `ls -t1 *.deb| grep -v apport` >> /dev/null 2>&1
  #Check if apport package is already not present then isntall it.
  dpkg -l |grep apport >/dev/null
  if [ $? -ne 0 ];then
    echo "Installing apport packages - " >> /dev/null 2>&1
    dpkg  -iG *apport* >> /dev/null 2>&1
  fi
  #dpkg -iG *.deb >> /dev/null 2>&1
  dpkg -iG python* >> /dev/null 2>&1
  dpkg -iG ibus* >> /dev/null 2>&1
  dpkg -iG libsigsegv2* gawk* >> /dev/null 2>&1
  dpkg --configure -a >> /dev/null 2>&1

  echo /usr/lib/oracle/12.1/client64/lib > /etc/ld.so.conf.d/oracle.conf
  ln -s /usr/lib/oracle/12.1/client64/lib/libodbc.so.2 /usr/lib/oracle/12.1/client64/lib/libodbc_1.so.2 >>/dev/null 2>&1
  ldconfig
  grep  "ORACLE_HOME" /root/.bashrc
  if [[ $? == 1 ]];then
     echo "export ORACLE_HOME=/usr/lib/oracle/12.1/client64" >> /root/.bashrc
  fi
  grep  "ORACLE_HOME" /home/cavisson/.bashrc
  if [[ $? == 1 ]];then
      echo "export ORACLE_HOME=/usr/lib/oracle/12.1/client64" >>  /home/cavisson/.bashrc
  fi
  grep  "LD_LIB_PATH" /root/.bashrc
  if [[ $? == 1 ]];then
      echo "export LD_LIB_PATH=/usr/lib/oracle/12.1/client64/lib" >> /root/.bashrc
  fi
  grep  "LD_LIB_PATH" /home/cavisson/.bashrc
  if [[ $? == 1 ]];then
  echo "export LD_LIB_PATH=/usr/lib/oracle/12.1/client64/lib" >> /home/cavisson/.bashrc
  fi
  grep "export PATH=\$ORACLE_HOME:\$PATH" /root/.bashrc
  if [[ $? == 1 ]];then
  echo "export PATH=\$ORACLE_HOME:\$PATH" >> /root/.bashrc
  fi
  grep "export PATH=\$ORACLE_HOME:\$PATH" /home/cavisson/.bashrc
  if [[ $? == 1 ]];then
   echo "export PATH=\$ORACLE_HOME:\$PATH" >> /home/cavisson/.bashrc
  fi
install_kernel_cavisson_pkgs()
{
  cd cavisson_kernel_pkgs
  dpkg -iG *.deb >> /dev/null 2>&1
  dpkg --configure -a >> /dev/null 2>&1
  cd -
}
install_kernel_cavisson_pkgs
apt update
DEBIAN_FRONTEND=noninteractive apt-get -y install --fix-broken \
-o Dpkg::Options::="--force-confdef" \
-o Dpkg::Options::="--force-confold"
#Creating the Service shell. 
cat << 'EOF' > /root/ip_check.sh
#!/bin/bash

systemctl restart network-manager

ip_check(){
    TIMEOUT=300
    INTERVAL=10

    check_ip() {
        IP=$(hostname -I)
        if [[ -n "$IP" ]]; then
            return 0
        else
            return 1
        fi
    }

    START_TIME=$(date +%s)

    while true; do
        if check_ip; then
            echo "IP is assigned: $(hostname -I)"
            exit 0
        else
            echo "No IP assigned yet. Checking again in $INTERVAL seconds..."
        fi
        systemctl restart network-manager
        sleep $INTERVAL

        CURRENT_TIME=$(date +%s)
        ELAPSED_TIME=$((CURRENT_TIME - START_TIME))

        if [ $ELAPSED_TIME -ge $TIMEOUT ]; then
            echo "Timeout reached. Exiting."
            exit 1
        fi
    done
}

ip_check 
EOF
chmod +x /root/ip_check.sh
cat << 'EOF' > /usr/local/bin/myservice.sh
#!/bin/bash
bash /root/ip_check.sh >> /root/ip_check_log
bash /root/ServerInstaller.sh >> /root/Cav_log
EOF

# Make the script executable
chmod +x /usr/local/bin/myservice.sh
# Create the systemd service file
cat << 'EOF' > /etc/systemd/system/cavbin.service
[Unit]
Description=Cavbin

[Service]
Type=simple
ExecStart=/usr/local/bin/myservice.sh
ExecStopPost=/bin/sh -c 'systemctl disable --now cavbin.service; rm /etc/systemd/system/cavbin.service'
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl enable /etc/systemd/system/cavbin.service

if [ -d /root/test/ ];then
        rm -rf /root/test
fi

