#!/usr/bin/env bash
set -euo pipefail

PACKAGE_DIR="$(cd "$(dirname "$0")/.." && pwd)"
NGINX_SOURCE="$PACKAGE_DIR/files/usr/local/nginx/conf"
REDIS_SOURCE="$PACKAGE_DIR/files/etc/redis.conf.template"
SUPERVISOR_SOURCE="$PACKAGE_DIR/files/etc/supervisor"
SYSTEMD_DIR="$PACKAGE_DIR/files/etc/systemd/system"
PHP73_BIN="/usr/local/php7.3/bin/php"
PHP73_LINK="/usr/local/php/bin/php"
PHP73_FRAGMENT="$PACKAGE_DIR/files/usr/local/php7.3/etc/php.ini.sfd-append"
PHP74_FRAGMENT="$PACKAGE_DIR/files/usr/local/php7.4/etc/php.ini.sfd-append"

if [ "$(id -u)" -ne 0 ]; then
    echo "Run as root on the Sifangda application server." >&2
    exit 1
fi

if grep -q '__SFD_' "$REDIS_SOURCE"; then
    echo "Replace __SFD_REDIS_PASSWORD__ in files/etc/redis.conf.template first." >&2
    exit 1
fi

if [ ! -x "$PHP73_BIN" ]; then
    echo "PHP 7.3 executable not found: $PHP73_BIN" >&2
    exit 1
fi

mkdir -p "$(dirname "$PHP73_LINK")"
if [ -L "$PHP73_LINK" ]; then
    if [ "$(readlink "$PHP73_LINK")" != "$PHP73_BIN" ]; then
        echo "Existing PHP compatibility link points elsewhere: $PHP73_LINK" >&2
        exit 1
    fi
elif [ -e "$PHP73_LINK" ]; then
    echo "Refusing to replace existing non-symlink path: $PHP73_LINK" >&2
    exit 1
else
    ln -s "$PHP73_BIN" "$PHP73_LINK"
fi

mkdir -p \
    /usr/local/nginx/conf/rewrite \
    /usr/local/nginx/conf/vhost \
    /etc/supervisor/conf.d \
    /etc/systemd/system \
    /var/log/supervisor \
    /var/run/supervisor \
    /workspace/wwwlogs \
    /workspace/redis \
    /workspace/wwwroot/log/zhct_sfd/cron \
    /workspace/wwwroot/log/aizhct_sfd/cron \
    /workspace/wwwroot/zhct_sfd/current \
    /workspace/wwwroot/zhct_sfd/project \
    /workspace/wwwroot/aizhct_sfd/current \
    /workspace/wwwroot/aizhct_sfd/project

install -m 0644 "$NGINX_SOURCE/nginx.conf" /usr/local/nginx/conf/nginx.conf
install -m 0644 "$NGINX_SOURCE/enable-php.conf" /usr/local/nginx/conf/enable-php.conf
install -m 0644 "$NGINX_SOURCE/enable-php7.4.conf" /usr/local/nginx/conf/enable-php7.4.conf
install -m 0644 "$NGINX_SOURCE/pathinfo.conf" /usr/local/nginx/conf/pathinfo.conf
install -m 0644 "$NGINX_SOURCE/rewrite/thinkphp.conf" /usr/local/nginx/conf/rewrite/thinkphp.conf
install -m 0644 "$NGINX_SOURCE/vhost/zhct_sfd.conf" /usr/local/nginx/conf/vhost/zhct_sfd.conf
install -m 0644 "$NGINX_SOURCE/vhost/aizhct_sfd.conf" /usr/local/nginx/conf/vhost/aizhct_sfd.conf

install -m 0640 "$REDIS_SOURCE" /etc/redis.conf
if getent group redis >/dev/null 2>&1; then
    chown root:redis /etc/redis.conf
else
    echo "Redis group not found; install Redis before starting the service." >&2
fi

install -m 0644 "$SUPERVISOR_SOURCE/supervisord.conf" /etc/supervisor/supervisord.conf
for service in nginx.service php-fpm73.service php-fpm74.service redis-sfd.service supervisor.service; do
    install -m 0644 "$SYSTEMD_DIR/$service" "/etc/systemd/system/$service"
done

if [ -f /usr/local/php7.3/etc/php.ini ] && ! grep -q 'BEGIN SIFANGDA PHP 7.3 RUNTIME' /usr/local/php7.3/etc/php.ini; then
    printf '\n' >> /usr/local/php7.3/etc/php.ini
    cat "$PHP73_FRAGMENT" >> /usr/local/php7.3/etc/php.ini
fi

if [ -f /usr/local/php7.4/etc/php.ini ] && ! grep -q 'BEGIN SIFANGDA AI RUNTIME' /usr/local/php7.4/etc/php.ini; then
    printf '\n' >> /usr/local/php7.4/etc/php.ini
    cat "$PHP74_FRAGMENT" >> /usr/local/php7.4/etc/php.ini
fi

chown -R www:www \
    /workspace/wwwroot/zhct_sfd \
    /workspace/wwwroot/aizhct_sfd \
    /workspace/wwwroot/log/zhct_sfd \
    /workspace/wwwroot/log/aizhct_sfd
chown -R redis:redis /workspace/redis 2>/dev/null || true

systemctl daemon-reload
/usr/local/nginx/sbin/nginx -t

echo "Sifangda application-server configuration installed."
echo "PHP compatibility link verified: $PHP73_LINK -> $PHP73_BIN"
echo "Base systemd services installed; business Supervisor programs remain disabled."
echo "No Sifangda business Cron or Supervisor program was installed or enabled."
echo "After project deployment, run scripts/enable-project-runtime-config.sh."
