#!/usr/bin/env sh

PROJECT=$1
LOG_DIR="/var/log/openSUSE-release-tools/${PROJECT}"
[ ! -d "${LOG_DIR}" ] && mkdir ${LOG_DIR}

logger() {
    date -Is >> ${LOG_DIR}/pkglistgen.log
    echo "$1" >> ${LOG_DIR}/pkglistgen.log
}

polling_repo() {
    logger "[CHECKING] Checking standard repository from ${PROJECT}"
    OUTPUT=$(timeout 3m /usr/share/openSUSE-release-tools/verify-repo-built-successful.py -A ${API_URL} -p ${PROJECT} -r standard 2>&1)
    RETURNCODE=$?
    if [ ${RETURNCODE} -eq 0 ]; then
        logger "[READY] Repository is NOT building"
    elif [ ${RETURNCODE} -eq 124 ]; then
        logger "[TIMEOUT] Verifying repository status reaches a timeout"
    else
        case ${OUTPUT} in
            *"Repository "*" is not yet finished"*)
                logger "[BUILDING] Repository is building"
                RETURNCODE=3
                ;;
            *"Repository "*" has "*" packages"*)
                logger "[FAILED] Repository has package build failed"
                RETURNCODE=4
                ;;
            *"Repository "*" has more disabled packages than succeeded"*)
                logger "[ERROR] Repository has more disabled packages than succeeded"
                RETURNCODE=5
                ;;
        esac
        logger "${OUTPUT}"
    fi
    return ${RETURNCODE}
}

logger "[START] Start osrt-pkglistgen@${PROJECT}.service: polling repository results"
polling_repo
# Check if repository building
if [ $? -eq 3 ]; then
    # Repository is building, waiting it finishes
    while true; do
        logger "[WAITING] Waiting 10min before next repository status check"
        sleep 10m
        polling_repo
        case $? in
            0)
                # Stop polling repository results: Repository finished building
                if systemctl is-active --quiet osrt-relpkggen@${PROJECT}.service; then
                    logger "[WARNING] osrt-relpkggen@${PROJECT}.service is running"
                    logger "[WAITING] Waiting for osrt-relpkggen@${PROJECT}.service finishes"
                    continue
                else
                    logger"[RUNNING] Running osrt-pkglistgen"
                    /usr/bin/osrt-pkglistgen -A ${API_URL} --debug update_and_solve -p ${PROJECT} -s target --custom-cache-tag product --force >> ${LOG_DIR}/pkglistgen.log 2>&1
                    exit $?
                fi
                ;;
            3)
                # Continue polling repository results: Repository is still building
                continue
                ;;
            124)
                # Retry polling repository results: Verifying repository results reaches a timeout
                continue
                ;;
            *)
                # Stop polling repository results: Failed polling results
                exit 1
                ;;
        esac
    done
fi
logger "[FINISH] Finish osrt-pkglistgen@${PROJECT}.service"
