#!/bin/bash

getAptPackage(){
    printf "\n\n==> Getting environment packages\n"
    export DEBIAN_FRONTEND=noninteractive
    apt-get update
	apt-get install -y vim ntp zip unzip curl wget build-essential fp-compiler python2.7 python3.10 python3-requests libseccomp-dev openjdk-8-jdk openjdk-11-jdk openjdk-17-jdk
}

setJudgeConf(){
    printf "\n\n==> Setting judger files\n"
    #specify environment
    cat > /etc/environment <<UOJEOF
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
UOJEOF
    #Add judger user
    adduser judger --gecos "" --disabled-password
    #Set uoj_data path
    mkdir /var/uoj_data_copy && chown judger /var/uoj_data_copy
    #Compile uoj_judger and set runtime
    chown -R judger:judger /opt/uoj_judger
    su judger <<EOD
ln -s /var/uoj_data_copy /opt/uoj_judger/uoj_judger/data
cd /opt/uoj_judger && chmod +x judge_client
cd uoj_judger && make -j$(($(nproc) + 1))
EOD
}

initProgress(){
    printf "\n\n==> Doing initial config and start service\n"
    # Check envs
    if [ -z "$UOJ_PROTOCOL" -o -z "$UOJ_HOST" -o -z "$JUDGER_NAME" -o -z "$JUDGER_PASSWORD" -o -z "$SOCKET_PORT" -o -z "$SOCKET_PASSWORD" ]; then
        echo "!! Environment variables not set! Please edit config file by yourself!"
    else
        # Set judge_client config file
        cat >.conf.json <<UOJEOF
{
    "uoj_protocol": "$UOJ_PROTOCOL",
    "uoj_host": "$UOJ_HOST",
    "judger_name": "$JUDGER_NAME",
    "judger_password": "$JUDGER_PASSWORD",
    "socket_port": $SOCKET_PORT,
    "socket_password": "$SOCKET_PASSWORD"
}
UOJEOF
        chmod 600 .conf.json && chown judger .conf.json
        chown -R judger:judger ./log
        #Start services
        service ntp restart
        su judger -c '/opt/uoj_judger/judge_client start'
        echo "please modify the database after getting the judger server ready:"
        echo "insert into judger_info (judger_name, password, ip) values ('$JUDGER_NAME', '$JUDGER_PASSWORD', '__judger_ip_here__');"
        printf "\n\n***Installation complete. Enjoy!***\n"
    fi
}

prepProgress(){
    setJudgeConf
}

if [ $# -le 0 ]; then
    echo 'Installing UOJ System judger...'
    getAptPackage;prepProgress;initProgress
fi
while [ $# -gt 0 ]; do
    case "$1" in
        -p | --prep)
            echo 'Preparing UOJ System judger environment...'
            prepProgress
        ;;
        -i | --init)
            echo 'Initing UOJ System judger...'
            initProgress
        ;;
        -? | --*)
            echo "Illegal option $1"
        ;;
    esac
    shift $(( $#>0?1:0 ))
done