#!/bin/bash
set -e

if [ $EUID == 0 ]; then
    echo "This script must not be run as root" 1>&2
    exit 1
fi

RELEASE_SIGNED="Release.gpg"
CONF_FILE="/etc/xivo-build-tools/config"
PGK_FOLDER="/home/builder/packages"
DEB_FOLDER="/home/builder/build_from_sources"
DT=$(date '+%a, %d %b %Y %H:%M:%S %Z');
#BRANCH="2016.02"

# source conffile
if [ -e $CONF_FILE ]; then
    . $CONF_FILE
else
    echo "$CONF_FILE: no such file" >&2
    exit 1
fi


usage() {
    cat << EOF
You have to provide some informations to allow building:

    Usage: $(basename $0) [OPTION]

    Options:
        -b <branch_name>: Git branch to build from (default: $GIT_BRANCH_DEFAULT)
        -a: Build all packages
        -s: Build only sources packages
        -S: Build packages from sources
        -p <package>: Build only <package>
        -f: Force package build without checking for changes in repository
        -v: Set xivo version
        -h: show this help

EOF
    exit 0
}

hash_release_deb(){

    cat > Release <<EOF
Archive: xivo
Origin: Debian
Label: Local Debian Xivo Repository
Architecture: all
Date: $DT
MD5Sum:
EOF
printf ' '$(md5sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages\n' \
  $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
printf ' '$(md5sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' \
  $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
cat <<EOT >> Release

SHA256:
EOT
printf ' '$(sha256sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages\n' \
  $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
printf ' '$(sha256sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' \
  $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release

}

update_release_deb() {
    cd $DEB_FOLDER/
    dpkg-scanpackages . /dev/null > Packages && gzip -9c Packages > Packages.gz
    hash_release_deb
    if [ -f $RELEASE_SIGNED ] ; then
        rm $RELEASE_SIGNED
    fi
    gpg --armor --detach-sign --output Release.gpg Release
}

hash_release_src(){

    cat > Release <<EOF
Archive: xivo
Origin: Debian
Label: Local Debian Xivo Repository
Architecture: all
Date: $DT
MD5Sum:
EOF
printf ' '$(md5sum Sources | cut --delimiter=' ' --fields=1)' %16d Sources\n' \
  $(wc --bytes Sources | cut --delimiter=' ' --fields=1) >> Release
printf ' '$(md5sum Sources.gz | cut --delimiter=' ' --fields=1)' %16d Sources.gz' \
  $(wc --bytes Sources.gz | cut --delimiter=' ' --fields=1) >> Release
cat <<EOT >> Release

SHA256:
EOT
printf ' '$(sha256sum Sources | cut --delimiter=' ' --fields=1)' %16d Sources\n' \
  $(wc --bytes Sources | cut --delimiter=' ' --fields=1) >> Release
printf ' '$(sha256sum Sources.gz | cut --delimiter=' ' --fields=1)' %16d Sources.gz' \
  $(wc --bytes Sources.gz | cut --delimiter=' ' --fields=1) >> Release

}

update_release_src() {
    cd $PGK_FOLDER/
    dpkg-scansources . /dev/null > Sources && gzip -9c Sources > Sources.gz
    hash_release_src
    if [ -f $RELEASE_SIGNED ] ; then
        rm $RELEASE_SIGNED
    fi
    gpg --armor --detach-sign --output Release.gpg Release
}


while getopts :b:v:p:hsSaf opt
do
    case $opt in
        b) BRANCH=$OPTARG;;
        d) distribution=$OPTARG;;
        p) force_package=$OPTARG;;
        v) force_xivo_version=$OPTARG;;
        s) build_only_source=1;;
        S) build_package_from_source=1;;
        a) all=1;;
        f) force_rebuild=1;;
        u) use_version=1;;
        h) usage;;
        '?') echo "$0 : option $OPTARG is not valid" >&2
            usage
        ;;
    esac
done

xivo_version="${force_xivo_version:-""}"
package_version="${force_package_version:-""}"
all="${all:-"0"}"
build_only_source="${build_only_source:-"0"}"
build_package_from_source="${build_package_from_source:-"0"}"
build_module_kernel="${build_module_kernel:-"0"}"
force_rebuild="${force_rebuild:-"0"}"

build_package_from_source_directory="${HOME}/build_from_sources"

OPT_STR=""
if [ $build_only_source -eq 1 ]; then
    OPT_STR="-s -f"
fi

if [ $build_package_from_source -eq 1 ]; then
    OPT_STR="-S -f"
fi


if [ $all -eq 1 ]; then
    for package in $PACKAGES; do
        if [ "$package" == "asterisk" ]; then
            #xivo-build-tools -p dahdi-linux $OPT_STR  -v $force_xivo_version-2
            #update_release_deb
            #xivo-build-tools -p xivo-pjproject-packaging $OPT_STR  -V 2.5-1~xivo1
            #xivo-build-tools -p libpri $OPT_STR  -v $force_xivo_version-2 -b $BRANCH
            #update_release_deb
            #xivo-build-tools -p xivo-keyring $OPT_STR  -v $force_xivo_version -b $BRANCH
            xivo-build-tools -p $package $OPT_STR  -V 8:13.9.1-1~xivo11
            update_release_deb
            #xivo-build-tools -p dahdi-tools $OPT_STR  -v $force_xivo_version-2
        elif [ "$package" == "asterisk-moh-opsound" ]; then
            xivo-build-tools -p $package $OPT_STR -b $BRANCH
        elif [ "$package" == "bntools" ]; then
            xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version-1
        elif [ "$package" == "dahdi-linux" ]; then
            xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version-2
        elif [ "$package" == "libpri" ]; then
                xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version-2 -b $BRANCH
        elif [ "$package" == "xivo" ]; then
            xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$package" == "xivo-keyring" ]; then
                xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$package" == "xivo-flask-cors-packaging" ]; then
                xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$package" == "xivo-flask-negotiate-packaging" ]; then
                xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$package" == "xivo-python-threadpool-packaging" ]; then
                xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$package" == "dahdi-tools" ]; then
            xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version-2
        elif [ "$package" == "xivo-pjproject-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR  -V 2.5-1~xivo1
        elif [ "$package" == "xivo-psqlodbc-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR
        elif [ "$package" == "xivo-python-amqp-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR
        elif [ "$package" == "xivo-python-asynqp-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR
        elif [ "$package" == "xivo-python-kombu-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR
        elif [ "$package" == "xivo-python-marshmallow-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR
        elif [ "$package" == "xivo-python-swaggerpy-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR
        elif [ "$package" == "xivo-python-websockets-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR
        elif [ "$package" == "xivo-unixodbc-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR
        elif [ "$package" == "xivo-libss7-packaging" ]; then
            xivo-build-tools -p $package $OPT_STR  -V 2.0-2~xivo7
        else
            xivo-build-tools -p $package $OPT_STR  -v $force_xivo_version
        fi
    if [ $build_only_source -eq 1 ]; then
        update_release_src
    fi

    if [ $build_package_from_source -eq 1 ]; then
        update_release_deb
    fi
    done
elif [ -n "$force_package" ]; then
        if [ "$force_package" == "asterisk" ]; then
            xivo-build-tools -p dahdi-linux $OPT_STR  -v $force_xivo_version-2
            update_release_deb
            xivo-build-tools -p xivo-pjproject-packaging $OPT_STR  -V 2.5-1~xivo1
            xivo-build-tools -p libpri $OPT_STR  -v $force_xivo_version-2 -b $BRANCH
            update_release_deb
            update_release_src
            xivo-build-tools -p $force_package $OPT_STR  -V 8:13.9.1-1~xivo11
            update_release_deb
            xivo-build-tools -p dahdi-tools $OPT_STR  -v $force_xivo_version-2
        elif [ "$force_package" == "asterisk-moh-opsound" ]; then
            xivo-build-tools -p $force_package $OPT_STR -b $BRANCH
        elif [ "$force_package" == "bntools" ]; then
            xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version-1
        elif [ "$force_package" == "dahdi-linux" ]; then
            xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version-2
            #xivo-build-tools -k
        elif [ "$force_package" == "dahdi-tools" ]; then
            xivo-build-tools -p dahdi-linux $OPT_STR  -v $force_xivo_version-2
            xivo-build-tools -p xivo-pjproject-packaging $OPT_STR  -V 2.5-1~xivo1
            xivo-build-tools -p libpri $OPT_STR  -v $force_xivo_version-2 -b $BRANCH
            xivo-build-tools -p asterisk $OPT_STR  -V 8:13.9.1-1~xivo11
            xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version-2
        elif [ "$force_package" == "libpri" ]; then
            xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version-2 -b $BRANCH
        elif [ "$force_package" == "xivo" ]; then
            xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$force_package" == "xivo-keyring" ]; then
                xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$force_package" == "xivo-flask-cors-packaging" ]; then
                xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$force_package" == "xivo-flask-negotiate-packaging" ]; then
                xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$force_package" == "xivo-python-threadpool-packaging" ]; then
                xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version -b $BRANCH
        elif [ "$force_package" == "xivo-pjproject-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR  -V 2.5-1~xivo1
        elif [ "$force_package" == "xivo-psqlodbc-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR
        elif [ "$force_package" == "xivo-python-amqp-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR
        elif [ "$force_package" == "xivo-python-asynqp-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR
        elif [ "$force_package" == "xivo-python-kombu-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR
        elif [ "$force_package" == "xivo-python-marshmallow-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR
        elif [ "$force_package" == "xivo-python-swaggerpy-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR
        elif [ "$force_package" == "xivo-python-websockets-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR
        elif [ "$force_package" == "xivo-unixodbc-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR
        elif [ "$force_package" == "xivo-libss7-packaging" ]; then
            xivo-build-tools -p $force_package $OPT_STR  -V 2.0-2~xivo7
        else
            xivo-build-tools -p $force_package $OPT_STR  -v $force_xivo_version
        fi
if [ $build_only_source -eq 1 ]; then
    update_release_src
fi

if [ $build_package_from_source -eq 1 ]; then
    update_release_deb
fi

fi