#!/bin/bash

SUBCMD="$1"
shift

usage() {
cat << EOF
Usage: $0 <SUBCOMMAND> [OPTION...]

Sub Commands:
    release     The release Tizen SDK.

Sub Command usage:
    web-cli release -u <dibs web url> -e <email> -p <password> -d <distribution>
                    --release-name <release name> --repository <repository url>
                    --snapshot <snapshot> [--target-os <target OS>] [--release-note <release note>]
                    [--image [--image-exclude <exclude package list>] ]
                    [--installer [--installer-include <include package list>] [--installer-exclude <exclude package list>] ]
                    [--cli-installer [--cli-installer-include <include package list>] [--cli-installer-exclude <exclude package list>] ]
    web-cli package-push -u <dibs web url> -e <email> -p <password> -d <distribution>
                         --snapshot <snapshot> [--include <include package list>] [--exclude <exclude package list>]
    web-cli binary-upload -u <dibs web url> -e <email> -p <password> -d <distribution> --project <project name>
                         --file <package file path list> [--compat] [--approval-contents]
    web-cli source-build -u <dibs web url> -e <email> -p <password> -d <distribution> [--multi-project <multi project name>] --project <project name>
                    [--target-os <os list>] [(--patch <patch str> | --commit <commit Id>)] [--test] [--compat] [--approval-contents] [--interval]
    web-cli status -u <dibs web url> -e <email> -p <password> -j <job id>

Options:
    -h                      Show this message
    -c, --compat            compat package upload
    -u                      DIBS web server URL
    -e                      DIBS user email
    -p                      DIBS user password
    -j, --job_id            JOB ID
    -d, --distribution      Distribution name
    --release-name          Release name
    --repository            Repository URL
    --snapshot              Snapshot name
    --target-os             OS list for release target (comma seperate)
    --release-note          Release note
    --image                 Create image
    --image-exclude         Image excludes packages
    --installer             Create UI installer
    --installer-include     UI installer includes packages
    --installer-exclude     UI installer excludes packages
    --cli-installer         Create CLI installer
    --cli-installer-include CLI installer includes packages
    --cli-installer-exclude CLI installer excludes packages
    --include               Include packages
    --exclude               Exclude packages
    --multi-project         Multi project name (Tizen-Multi, visualstudio-multi)
    --project               Project name
    --file                  Package file path list (comma seperate)
    --approval-contents     approval contents message (ignore when develop phase)
    --patch-set             git patch set ex) refs/for/xxx/2
    --github-pullrequest    github pull request number ex) 1
    --commit                git commit id
    --test                  Test build
    --interval              A number of status check count (default: 180)

EOF
}

if [[ $SUBCMD == "-h" || $SUBCMD == "--help" ]]; then
    usage
    exit 0
fi

# Default value for release
RELEASE_NOTE=""
SDK_IMAGE=false
IMAGE_EXCLUDE_LIST=""
INSTALLER=false
INSTALLER_INCLUDE_LIST=""
INSTALLER_EXCLUDE_LIST=""
CLI_INSTALLER=false
CLI_INSTALLER_INCLUDE_LIST=""
CLI_INSTALLER_EXCLUDE_LIST=""

# Default value for package-push
INCLUDE_LIST=""
EXCLUDE_LIST=""

arrayToString() {
    local STR=""
    for element in "${@}"
    do
        if [ $STR ]; then
            STR="${STR},\"$element\""
        else
            STR="\"$element\""
        fi
    done
    echo $STR
}

while [[ $# > 0 ]]
do
key="$1"
case $key in
    -h|--help)
        usage
        exit 1
    ;;
    -e|--email)
    EMAIL="$2"
    shift
    ;;
    -p|--password)
    PASSWORD="$2"
    shift
    ;;
    -u|--url)
    URL="$2"
    shift
    ;;
    # Release option
    -d|--distribution)
    DISTRIBUTION="$2"
    shift
    ;;
    # job id
    -j|--job_id)
    JOBID="$2"
    shift
    ;;
    --release-name)
    RELEASE_NAME="$2"
    shift
    ;;
    --repository)
    REPOSITORY="$2"
    shift
    ;;
    --snapshot)
    SNAPSHOT="$2"
    shift
    ;;
    --target-os)
    TARGET_OS="$2"
    shift
    ;;
    --release-note)
    RELEASE_NOTE="$2"
    shift
    ;;
    --image)
    SDK_IMAGE=true
    ;;
    --image-exclude)
    IFS=',' read -a IMAGE_EXCLUDE <<< "$2"
    shift
    ;;
    --installer)
    INSTALLER=true
    ;;
    --installer-include)
    IFS=',' read -a INSTALLER_INCLUDE <<< "$2"
    shift
    ;;
    --installer-exclude)
    IFS=',' read -a INSTALLER_EXCLUDE <<< "$2"
    shift
    ;;
    --cli-installer)
    CLI_INSTALLER=true
    ;;
    --cli-installer-include)
    IFS=',' read -a CLI_INSTALLER_INCLUDE <<< "$2"
    shift
    ;;
    --cli-installer-exclude)
    IFS=',' read -a CLI_INSTALLER_EXCLUDE <<< "$2"
    shift
    ;;
    --include)
    IFS=',' read -a INCLUDE <<< "$2"
    shift
    ;;
    --exclude)
    IFS=',' read -a EXCLUDE <<< "$2"
    shift
    ;;
    --multi-project)
    MULTI_PROJECT="$2"
    shift
    ;;
    --project)
    PROJECT="$2"
    shift
    ;;
    --os)
    OS="$2"
    shift
    ;;
    --file)
    FILE="$2"
    shift
    ;;
    -c|--compat)
    COMPAT=",\"UPLOAD_COMPAT\":true"
    ;;
    --approval-contents)
    APPROVAL_CONTENTS="$2"
    shift
    ;;
    --patch)
    GIT_PATCH_SET="$2"
    shift
    ;;
    --github-pullrequest)
    GITHUB_PULLREQUEST="$2"
    shift
    ;;
    --commit)
    GIT_COMMIT_ID="$2"
    shift
    ;;
    --interval)
    INTERVAL="$2"
    shift
    ;;
    --test)
    TEST_BUILD=true
    # shift
    ;;
    # Other
    *)
    echo "Unknown options ${key}"
    exit 1
    ;;
esac
shift
done

if [ -z "`which curl`" ] ; then
    echo "Web-cli is required by \"curl\" but is not installed"
    exit 1
fi

# check default input value
if [ ! $SUBCMD ] || [ $SUBCMD == "" ]; then
    echo "Missing sub command! ${SUBCMD}"
    exit 1
elif [[ $SUBCMD != 'release' && $SUBCMD != 'package-push' && $SUBCMD != 'binary-upload' && $SUBCMD != 'source-build' && $SUBCMD != 'status' ]]; then
    echo "Not supported sub command! ${SUBCMD}"
    exit 1
fi
if [[ $URL == "" || ! $URL ]]; then
    echo "Missing argument of <-u url>"
    exit 1
fi
if [[ $EMAIL == "" || ! $EMAIL ]]; then
    echo "Missing argument of <-e email>"
    exit 1
fi
if [[ $PASSWORD == "" || ! $PASSWORD ]]; then
    echo "Missing argument of <-p {password}>"
    exit 1
fi

# check subcmd input value
if [ $SUBCMD == "release" ]; then
    if [[ ! $DISTRIBUTION || $DISTRIBUTION == "" ]]; then
        echo "Missing argument of <-d|--distribution {distribution}>"
        exit 1
    fi

    if [[ ! $RELEASE_NAME || $RELEASE_NAME == "" ]]; then
        echo "Missing argument of <--release-name {release name}>"
        exit 1
    fi

    if [[ ! $REPOSITORY || $REPOSITORY == "" ]]; then
        echo "Missing argument of <--repository {repository}>"
        exit 1
    fi

    if [[ ! $SNAPSHOT || $SNAPSHOT == "" ]]; then
        echo "Missing argument of <--snapshot {snapshot}>"
        exit 1
    fi

    if [[ ! $TARGET_OS || $TARGET_OS == "" ]]; then
        # TARGET_OS="[\"ubuntu-32\",\"ubuntu-64\",\"windows-32\",\"windows-64\",\"macos-64\"]"
        echo "Missing argument of <--target-os {target-os}>"
        exit 1
    else
        TARGET_OS="[\"${TARGET_OS}\"]"
    fi

    IMAGE_EXCLUDE_LIST=$(arrayToString ${IMAGE_EXCLUDE[@]})
    INSTALLER_INCLUDE_LIST=$(arrayToString ${INSTALLER_INCLUDE[@]})
    INSTALLER_EXCLUDE_LIST=$(arrayToString ${INSTALLER_EXCLUDE[@]})
    CLI_INSTALLER_INCLUDE_LIST=$(arrayToString ${CLI_INSTALLER_INCLUDE[@]})
    CLI_INSTALLER_EXCLUDE_LIST=$(arrayToString ${CLI_INSTALLER_EXCLUDE[@]})

    RELEASE_NOTE="${RELEASE_NOTE}"
    SDK_IMAGE_OPTION=",\"SDK_IMAGE\":${SDK_IMAGE},\"IMG_EXCLUDE_LIST\":[${IMAGE_EXCLUDE_LIST}]"
    INSTALLER_OPTION=",\"SDK_INSTALLER\":${INSTALLER},\"INSTALLER_EXCLUDE_LIST\":[${INSTALLER_EXCLUDE_LIST}],\"INSTALLER_INCLUDE_LIST\":[${INSTALLER_INCLUDE_LIST}]"
    CLI_INSTALLER_OPTION=",\"CLI_SDK_INSTALLER\":${CLI_INSTALLER},\"CLI_INSTALLER_EXCLUDE_LIST\":[${CLI_INSTALLER_EXCLUDE_LIST}],\"CLI_INSTALLER_INCLUDE_LIST\":[${CLI_INSTALLER_INCLUDE_LIST}]"
elif [ $SUBCMD == "package-push" ]; then
    if [[ ! $DISTRIBUTION || $DISTRIBUTION == "" ]]; then
        echo "Missing argument of <-d|--distribution {distribution}>"
        exit 1
    fi

    if [[ ! $SNAPSHOT || $SNAPSHOT == "" ]]; then
        echo "Missing argument of <--snapshot {snapshot}>"
        exit 1
    fi

    INCLUDE_LIST=$(arrayToString ${INCLUDE[@]})
    EXCLUDE_LIST=$(arrayToString ${EXCLUDE[@]})
    if [ $INCLUDE_LIST ]; then
        PACKAGE_PUSH_OPTION=",\"INCLUDE_ALL\":false,\"INCLUDE\":[${INCLUDE_LIST}],\"EXCLUDE\":[${EXCLUDE_LIST}]"
    else
        PACKAGE_PUSH_OPTION=",\"INCLUDE_ALL\":true,\"INCLUDE\":[],\"EXCLUDE\":[${EXCLUDE_LIST}]"
    fi
elif [ $SUBCMD == "binary-upload" ]; then
    if [[ ! $DISTRIBUTION || $DISTRIBUTION == "" ]]; then
        echo "Missing argument of <-d|--distribution {distribution}>"
        exit 1
    fi

    if [[ ! $PROJECT|| $PROJECT == "" ]]; then
        echo "Missing argument of <--project {Project name}>"
        exit 1
    fi

    if [[ ! $FILE|| $FILE == "" ]]; then
        echo "Missing argument of <--file {package file path}>"
        exit 1
    fi
elif [ $SUBCMD == "source-build" ]; then
    if [[ ! $DISTRIBUTION || $DISTRIBUTION == "" ]]; then
        echo "Missing argument of <-d|--distribution {distribution}>"
        exit 1
    fi

    if [[ ! $PROJECT|| $PROJECT == "" ]]; then
        echo "Missing argument of <--project {Project name}>"
        exit 1
    fi

    if [[ ! $TARGET_OS || $TARGET_OS == "" ]]; then
        echo "Missing argument of <--target-os {target-os}>"
        exit 1
    #     TARGET_OS="[\"ubuntu-32\",\"ubuntu-64\",\"windows-32\",\"windows-64\",\"macos-64\"]"
    else
        TARGET_OS="[\"${TARGET_OS}\"]"
    fi

    UPLOAD="\"UPLOAD_TEMP\""
    if [ $TEST_BUILD ]; then
        UPLOAD=${UPLOAD}":true,\"UPLOAD\":false"
    else
        UPLOAD="\"UPLOAD\":true"
    fi

    GIT_OPT=""

    if [[ $GIT_PATCH_SET && $GIT_PATCH_SET != "" ]]; then
        GIT_OPT=",\"GIT_PATCHSET\":\"$GIT_PATCH_SET\""
    fi

    if [[ $GIT_COMMIT_ID && $GIT_COMMIT_ID != "" ]]; then
        GIT_OPT=",\"GIT_COMMIT\":\"$GIT_COMMIT_ID\""
    fi

    if [[ $GITHUB_PULLREQUEST && $GITHUB_PULLREQUEST != "" ]]; then
        GIT_OPT=",\"GITHUB_PULLREQUEST\":\"$GITHUB_PULLREQUEST\""
    fi
elif [ $SUBCMD == "status" ]; then
    if [[ ! $JOBID|| $JOBID == "" ]]; then
        echo "Missing argument of <-j|--job_id {job id}>"
        exit 1
    fi
fi

# Login, get session
OUTPUT="$(curl -s -o web-cli.log -w %{http_code} -c dibs-cookie.txt -d email=${EMAIL} -d password=${PASSWORD} ${URL}'/login')"
if [ $OUTPUT -ne "200" ]; then
    echo "Login failed..."
    echo "Http status: ${OUTPUT}"
    echo RESULT="FAILURE" >> env.properties
    exit 1
else
    echo "Login success..."
fi
echo "DATA"

GET_DISTRIBUTION_INFO ()
{
    OUTPUT="$(curl -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' -X GET ${URL}/distributions/${DISTRIBUTION})"

    REPO_URL=cat temp.log | grep REPO_URL | awk -F ' ' '{print $2}'
    echo REPO_URL=${REPO_URL} >> env.properties

    if [ $OUTPUT -ne "200" ]; then
        echo "Request job failed - get distribution info"
        echo "Http status: ${OUTPUT}"
    echo RESULT="FAILURE" >> env.properties
        exit 1
    else
        echo " - get distribution info success"
    fi
}

APPROVALINFO="";
SET_APPROVAL_INFO ()
{
    if [ "`cat temp.log | grep 'PHASE' | cut -d ':' -f2 | tr -d '" ,'`" == 'release' ] ; then
        APPROVALINFO=",\"approvalInfo\":{\"subject\":\"manual upload ${PROJECT} (${DISTRIBUTION})\",\"contents\":\"${APPROVAL_CONTENTS}\",\"approvalRoutes\":[{\"order\":0,\"type\":\"DRAFT\",\"email\":\"${EMAIL}\"}"
        ROUTES=`cat temp.log | grep 'CLI_APPROVAL_ROUTES' | cut -d ':' -f2 | sed -e "s/\"//g"`
        ORDER=1
        for i in `echo $ROUTES |sed -e "s/,/ /g"`
        do
            AEMAIL=`echo $i | cut -d'(' -f1`
            ATYPE=`echo $i | cut -d'(' -f2 | cut -d')' -f1`
            APPROVALINFO="$APPROVALINFO,{\"order\":$ORDER,\"type\":\"$ATYPE\",\"email\":\"$AEMAIL\"}"
            ORDER=`expr $ORDER + 1`
        done

        APPROVALINFO="$APPROVALINFO]}"
        echo " - get approval template success"
    fi
}

GET_DFSPATH ()
{
    OUTPUT="$(curl -o temp.log -w %{http_code} -b dibs-cookie.txt -F uploadedfiles=@$1 -F press=OK ${URL}/upload)"
    if [ $OUTPUT -ne "200" ]; then
        echo "Request job failed - upload file"
        echo "Http status: ${OUTPUT}"
        cat temp.log
        echo ''
    echo RESULT="FAILURE" >> env.properties
        exit 1
    else
        echo " - upload file success"
        DFSPATH=`cat temp.log | sed -e "s/^.*path\":\(.*\)}/\1/"`
    fi
}

SEND_BINARY_JOB ()
{
    DATA="{\"projectName\":\"${PROJECT}\",\"distName\":\"${DISTRIBUTION}\",\"userEmail\":\"${EMAIL}\",\"options\":{\"environments\":[],\"UPLOAD\":true,\"FILEPATH\":${DFSPATH}${COMPAT}${APPROVALINFO}}}"
    echo $DATA > .data
    OUTPUT="$(curl -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' -d @.data ${URL}/jobs)"
    rm -rf .data
    if [ $OUTPUT -ne "200" ]; then
        echo "Request job failed - send job"
        echo "Http status: ${OUTPUT}"
        cat temp.log
        echo ''
    echo RESULT="FAILURE" >> env.properties
        exit 1
    else
        echo "register file success"
    fi
}


SEND_MULTI_SOURCE_BUILD_JOB ()
{
    DATA="{\"projectName\":\"${MULTI_PROJECT}\",\"distName\":\"${DISTRIBUTION}\",\"userEmail\":\"${EMAIL}\",\"options\":{\"environments\":[],${UPLOAD}${COMPAT}${APPROVALINFO}${SUB_JOBS}}}"
    echo $DATA > .data
    OUTPUT="$(curl -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' -d @.data ${URL}/jobs)"
    rm -rf .data
    if [ $OUTPUT -ne "200" ]; then
        echo "Request job failed - send jobs"
        echo "Http status: ${OUTPUT}"
        cat temp.log
        echo ''
echo RESULT="FAILURE" >> env.properties
        exit 1
    else
        echo "register file success"
        sleep 3

        # get job id
        SEARCH_LATEST_JOB
        # assign job id
        JOBID=${id}
        # check job status for 3 minutes
        POLLING_JOB_STATUS
    fi
}

SEND_SINGLE_SOURCE_BUILD_JOB ()
{
    DATA="{\"projectName\":\"${PROJECT}\",\"distName\":\"${DISTRIBUTION}\",\"userEmail\":\"${EMAIL}\",\"options\":{\"environments\":${TARGET_OS},\"TARGET_OS\":${TARGET_OS},${UPLOAD}${GIT_OPT}${COMPAT}${APPROVALINFO}}}"
    echo $DATA > .data
    OUTPUT="$(curl -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' -d @.data ${URL}/jobs)"

    rm -rf .data
    if [ $OUTPUT -ne "200" ]; then
        echo "Request job failed - send job"
        echo "Http status: ${OUTPUT}"
        cat temp.log
        echo ''
        echo RESULT="FAILURE" >> env.properties
        exit 1
    else
        echo "register job success"
        sleep 3

        # get job id
        SEARCH_LATEST_JOB
        # assign job id
        JOBID=${id}
        # check job status for 3 minutes
        POLLING_JOB_STATUS
    fi
}


POLLING_JOB_STATUS() {
    COUNT="0"

    if [[ ! $INTERVAL || $INTERVAL == "" ]]; then
        INTERVAL=180
    fi

    while [ $COUNT -lt $INTERVAL ]
    do
        JOB_STATUS

        if [[ ${STATUS} == "PENDING" || ${STATUS} == "FINISHED" || ${STATUS} == "CANCELED" || ${STATUS} == "ERROR" ]]; then
            echo "Finished JOB #${JOBID}: ${STATUS}"
            if [[ ${STATUS} == "CANCELED" || ${STATUS} == "ERROR" ]]; then
                if [[ ${STATUS} == "ERROR" ]]; then
                    echo " - $(cat temp.log | sed "s/.*statusInfo\":\"\([^\"][^\"]*\)\".*/\1/g")"
                fi
                echo RESULT="FAILURE" >> env.properties
                exit 1
            else
                echo SNAPSHOT_URL="${REPO_URL}/snapshots/TEMP_JOB-${JOBID}/" >> env.properties
                echo ARTIFACT_URL="${REPO_URL}/temp/job-${JOBID}/artifacts" >> env.properties
                echo RESULT="SUCCESS" >> env.properties
                exit 0
            fi
        fi
        COUNT=$[${COUNT} + 1]
        sleep 1
    done
}


JOB_STATUS ()
{
    OUTPUT="$(curl -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' ${URL}/jobs/${JOBID})"
    if [ $OUTPUT -ne "200" ]; then
        echo "Request job failed - send job"
        echo "Http status: ${OUTPUT}"
        cat temp.log
        echo ''
        echo RESULT="FAILURE" >> env.properties
        exit 1
    else
        STATUS="$(cat temp.log | sed "s/.*status\":\"\([^\"][^\"]*\)\".*/\1/g")"
        echo "- JOB Status: $STATUS"
    fi
}

SEARCH_LATEST_JOB ()
{
    echo "curl -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' ${URL}/jobs?projectName=${PROJECT}\&distName=${DISTRIBUTION}\&userEmail=${EMAIL}"

    OUTPUT="$(curl -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' ${URL}/jobs?projectName=${PROJECT}\&distName=${DISTRIBUTION}\&userEmail=${EMAIL})"
    if [ $OUTPUT -ne "200" ]; then
        echo "Request job failed - send job"
        echo "Http status: ${OUTPUT}"
        cat temp.log
        echo ''
        echo RESULT="FAILURE" >> env.properties
        exit 1
    else
        id="$(grep '"id":' temp.log | head -n 1 | cut -d: -f2 | tr -d ' ,')"
        status="$(grep '"status":' temp.log | head -n 1 | cut -d: -f2 | tr -d ' ,')"
        echo " - JOB #${id}"
    fi
}

SUB_JOBS=",\"SUB_JOBS\":["
SEND_MULTI_JOB ()
{
    DATA="{\"projectName\":\"Tizen-Multi\",\"distName\":\"${DISTRIBUTION}\",\"userEmail\":\"${EMAIL}\",\"options\":{\"environments\":[],\"UPLOAD\":true${COMPAT}${APPROVALINFO}${SUB_JOBS}}}"
    echo $DATA > .data
    OUTPUT="$(curl -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' -d @.data ${URL}/jobs)"
    rm -rf .data
    if [ $OUTPUT -ne "200" ]; then
        echo "Request job failed - send jobs"
        echo "Http status: ${OUTPUT}"
        cat temp.log
        echo ''
        echo RESULT="FAILURE" >> env.properties
        exit 1
    else
        echo "register file success"
    fi
}

BINARY_JOB ()
{
    GET_DISTRIBUTION_INFO
    SET_APPROVAL_INFO

    echo -n '' > .data
    for i in `echo $FILE | sed "s/,/ /g"` ;
    do
        echo $i >> .data
    done

    if [ `cat .data | wc -l` -gt 1 ] ; then
        sep=''
        for i in `cat .data`
        do
            GET_DFSPATH $i
            SUB_JOBS="${SUB_JOBS}${sep}{\"projectName\":\"${PROJECT}\",\"filePath\":${DFSPATH}}"
            sep=','
        done
        SUB_JOBS="$SUB_JOBS]"
        SEND_MULTI_JOB
    else
        GET_DFSPATH $FILE
        SEND_BINARY_JOB
    fi
}

SOURCE_JOB ()
{
    GET_DISTRIBUTION_INFO

    # remove double quotes and comma
    TARGET_OS_LIST=`echo ${TARGET_OS} | tr -d '[' | tr -d ']' | sed "s/\"//g" | sed "s/,/ /g"`
    # count a number of environments
    TARGET_OS_LENGTH=`echo ${TARGET_OS_LIST} | awk -F ' ' '{print NF}'`

    if [ ${TARGET_OS_LENGTH} -gt 1 ]; then
        echo "Request Multi Job"
        sep=''
        # assign SUB_JOBS
        for OS in ${TARGET_OS_LIST}
        do
            SUB_JOBS="${SUB_JOBS}${sep}{\"projectName\":\"${PROJECT}\",\"targetOS\":\"${OS}\"}"
            sep=','
        done
        SUB_JOBS="$SUB_JOBS]"
        SEND_MULTI_SOURCE_BUILD_JOB
    else
        # remove double quotes and comma
        PROJECT_LIST=`echo ${PROJECT} | tr -d '[' | tr -d ']' | sed "s/\"//g" | sed "s/,/ /g"`
        # count a number of environments
        PROJECT_LENGTH=`echo ${PROJECT_LIST} | awk -F ' ' '{print NF}'`

        if [ ${PROJECT_LENGTH} -gt 1 ]; then
            echo "Request Multi Job"
            sep=''
            # assign SUB_JOBS
            for SUB_PROJECT in ${PROJECT_LIST}
            do
                SUB_JOBS="${SUB_JOBS}${sep}{\"projectName\":\"${SUB_PROJECT}\",\"targetOS\":\"${TARGET_OS_LIST}\"}"
                sep=','
                PROJECT=${SUB_PROJECT}
            done
            SUB_JOBS="$SUB_JOBS]"
            SEND_MULTI_SOURCE_BUILD_JOB
        else
            echo "Request Single Job"
            SEND_SINGLE_SOURCE_BUILD_JOB
        fi
    fi
}

CHECK_JOB ()
{
    GET_DISTRIBUTION_INFO
    JOB_STATUS
}

# Sub command
if [ $SUBCMD == "release" ]; then
    DATA="{\"projectName\":\"Tizen-Release-Multi\",\"distName\":\"${DISTRIBUTION}\",\"userEmail\":\"${EMAIL}\",\"envName\":\"\",\"options\":{\"environments\":[],\"SNAPSHOT_NAME\":\"${SNAPSHOT}\",\"TARGET_OS_LIST\":${TARGET_OS},\"RELEASE_NAME\":\"${RELEASE_NAME}\",\"ORIGIN_REPO_URL\":\"${REPOSITORY}\",\"RELEASE_NOTE\":\"${RELEASE_NOTE}\",\"UPLOAD\":true${SDK_IMAGE_OPTION}${INSTALLER_OPTION}${CLI_INSTALLER_OPTION}}}"
    OUTPUT="$(curl -v -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' -d ${DATA} ${URL}'/jobs')"

    if [ -e "./temp.log" ]; then
        cat temp.log >>web-cli.log
    fi

    if [ $OUTPUT -ne "200" ]; then
        echo "Request job failed"
        echo "Http status: ${OUTPUT}"
        echo RESULT="FAILURE" >> env.properties
        exit 1
    else
        echo "Request job success"
    fi
elif [ $SUBCMD == "package-push" ]; then
    DATA="{\"projectName\":\"Tizen-Package-Push\",\"distName\":\"${DISTRIBUTION}\",\"userEmail\":\"${EMAIL}\",\"envName\":\"\",\"options\":{\"environments\":[],\"SNAPSHOT_NAME\":\"${SNAPSHOT}\",\"UPLOAD\":true${PACKAGE_PUSH_OPTION}}}"
    OUTPUT="$(curl -s -o temp.log -w %{http_code} -b dibs-cookie.txt -H 'Content-Type: application/json' -d ${DATA} ${URL}'/jobs')"
elif [ $SUBCMD == "binary-upload" ]; then
    BINARY_JOB
elif [ $SUBCMD == "source-build" ]; then
    SOURCE_JOB
elif [ $SUBCMD == "status" ]; then
    CHECK_JOB
fi

echo RESULT="SUCCESS" >> env.properties
exit 0
