#!/bin/bash
set -e

echo "========================================"
echo " ICTBroadcast Environment Setup Script "
echo " MariaDB 10.11 + PHP 8.3 (Remi) "
echo "========================================"

# -------------------------------
# Ensure script is run as root
# -------------------------------
if [ "$EUID" -ne 0 ]; then
  echo "❌ Please run this script as root or with sudo"
  exit 1
fi

# -------------------------------
# Create MariaDB 10.11 Repo
# -------------------------------
echo "➡ Creating MariaDB 10.11 repository..."

cat > /etc/yum.repos.d/MariaDB.repo << 'EOF'
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.11/rhel9-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

# -------------------------------
# Install required dependencies
# -------------------------------
echo "➡ Installing required dependencies..."

dnf install -y \
  perl-DBI \
  boost \
  boost-program-options \
  socat

# -------------------------------
# Install Perl & CPAN modules
# -------------------------------
echo "➡ Installing Perl and CPAN modules..."

dnf install -y perl perl-CPAN

# Non-interactive CPAN install
echo "➡ Installing Sys::Hostname via CPAN..."
echo yes | cpan Sys::Hostname

# -------------------------------
# Install MariaDB (Repo-forced)
# -------------------------------
echo "➡ Installing MariaDB Server & Client..."

dnf install MariaDB-server MariaDB-client \
  --disablerepo='*' \
  --enablerepo='mariadb' \
  --nobest -y

# -------------------------------
# Enable & start MariaDB
# -------------------------------
echo "➡ Enabling and starting MariaDB..."

systemctl enable mariadb
systemctl start mariadb

# -------------------------------
# Install EPEL & Remi repos
# -------------------------------
echo "➡ Installing EPEL & Remi repositories..."

dnf install -y epel-release
dnf install -y dnf-utils \
  http://rpms.remirepo.net/enterprise/remi-release-9.rpm

# -------------------------------
# Enable PHP 8.3 (Remi)
# -------------------------------
echo "➡ Enabling PHP 8.3 from Remi repository..."

dnf module reset php -y
dnf module enable php:remi-8.3 -y

# -------------------------------
# Install ICT Innovations Repo
# -------------------------------
echo "➡ Installing ICT Innovations release repository..."

dnf install -y \
  https://service.ictinnovations.com/repo/9/ict-release-9-5.el9.noarch.rpm

# -------------------------------
# Done
# -------------------------------
echo "========================================"
echo " ✅ Setup completed successfully!"
echo " - MariaDB 10.11 installed & running"
echo " - PHP 8.3 enabled via Remi"
echo " - ICT Innovations repo installed"
echo "========================================"

dnf config-manager --set-enabled highavailability
dnf install -y ictbroadcast ictbroadcast-sms ictbroadcast-email ictbroadcast-fax ictbroadcast-agent ictbroadcast-ivr ictbroadcast-theme-classic ictbroadcast-theme-minible

# -------------------------------
# Done
# -------------------------------
echo "========================================"
echo " ✅ ICTBroadcast Installed Successfully !"
echo "========================================"

# -------------------------------
# Install chrony
# -------------------------------
echo "➡ Installing chrony..."
dnf install -y chrony
systemctl enable chronyd
systemctl start chronyd

# -------------------------------
# Install ionCube Loader (PHP 8.3)
# -------------------------------
echo "➡ Installing ionCube loader..."

cd /usr/src
wget -q http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar xzf ioncube_loaders_lin_x86-64.tar.gz

cp ioncube/ioncube_loader_lin_8.3.so /usr/lib64/php/modules/

cat > /etc/php.d/00-ioncube.ini <<EOF
zend_extension=/usr/lib64/php/modules/ioncube_loader_lin_8.3.so
EOF

# -------------------------------
# Install mcrypt
# -------------------------------
echo "➡ Installing mcrypt..."

dnf install -y --enablerepo=epel php-devel php-pear libmcrypt libmcrypt-devel
printf "\n" | pecl install mcrypt || true

cat > /etc/php.d/mcrypt.ini <<EOF
extension=mcrypt.so
EOF

# -------------------------------
# PHP tidy & common extensions
# -------------------------------
echo "➡ Installing PHP extensions..."

dnf install -y \
  php-gd \
  php-gmp \
  php-intl \
  php-json \
  php-mhash \
  php-soap \
  php-xmlrpc \
  php-zip \
  libtidy \
  libtidy-devel

# -------------------------------
# Install Imagick
# -------------------------------
echo "➡ Installing ImageMagick & imagick..."

dnf install -y ImageMagick ImageMagick-devel

printf "\n" | pecl install imagick || \
dnf install -y php-imagick

cat > /etc/php.d/imagick.ini <<EOF
extension=imagick.so
EOF



# -------------------------------
# Install AMQP
# -------------------------------
echo "➡ Installing AMQP extension..."

dnf config-manager --set-enabled crb
dnf install -y librabbitmq librabbitmq-devel

printf "\n" | pecl install amqp-1.11.0

cat > /etc/php.d/amqp.ini <<EOF
extension=amqp.so
EOF

# -------------------------------
# MySQL Event Scheduler check
# -------------------------------
echo "➡ Ensuring MariaDB event scheduler is enabled..."

MYCNF="/etc/my.cnf"
if ! grep -q "event-scheduler=ON" "$MYCNF"; then
  cat >> "$MYCNF" <<EOF

[mysqld]
event-scheduler=ON
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
EOF
fi

# -------------------------------
# Reset MariaDB root password (EMPTY)
# -------------------------------
echo "➡ Resetting MariaDB root password (empty)..."

mysql mysql <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '';
FLUSH PRIVILEGES;
EOF

# -------------------------------
# Service restarts
# -------------------------------
echo "➡ Restarting services..."

systemctl restart httpd
systemctl restart php-fpm
systemctl restart asterisk || true
systemctl restart mariadb

# -------------------------------
# PHP Module Verification
# -------------------------------
echo "➡ Verifying PHP modules..."
php -m | egrep "ionCube|mcrypt|imagick|amqp"

# -------------------------------
# Final Installation Message
# -------------------------------

# Get Primary Local IP
LOCAL_IP=$(hostname -I | awk '{print $1}')

# Get Public IP (if server has internet access)
PUBLIC_IP=$(curl -s ifconfig.me || echo "Public-IP-Not-Detected")

echo ""
echo "=============================================="
echo " ✅ ICTBroadcast Installation Completed!"
echo "=============================================="
echo ""
echo "Please visit the following link to complete"
echo "the database setup process:"
echo ""
echo "Local Access  : http://${LOCAL_IP}"
echo ""
echo "=============================================="
echo ""
