#!/bin/bash

LANG=C

_method=$1
_branch=$2
_torepo=$3
_package=$4
_version=$5
_fromrepo=$6

_logfile="/var/log/bmove.log"
_search_url="http://localhost:1488/api/v1/search"

usage()
{
    echo "Usage bmove <-c|-m> <branch> <torepo> <package> <version> <fromrepo>";
    echo "      -c - copy";
    echo "      -m - move";
    echo "      branch - unstable | testing | stable | prestable";
    echo "      torepo, fromrepo - reponame (common, yandex-precise, verstka, etc)";
    echo
    exit 1;
}

bmove()
{
    if [ "${_method}" == "-m" ]; then
        echo $(date +"%Y-%m-%d %H:%M:%S"): "Moving package in Cacus"
        cacus bmove ${_branch} ${_torepo} ${_package} ${_version} ${_fromrepo}
    elif [ "${_method}" == "-c" ]; then
        echo $(date +"%Y-%m-%d %H:%M:%S"): "Copying package in Cacus"
        cacus bcopy ${_branch} ${_torepo} ${_package} ${_version} ${_fromrepo}
    fi

    if [ $? -eq 0 ]; then
        echo $(date +"%Y-%m-%d %H:%M:%S"): "Bmove successfully complete"
        echo "$(date +%s) $(date): $SUDO_USER : ${_branch} ${_package} ${_version} ${_fromrepo} -> ${_torepo}" >> ${_logfile}
    fi
}

function detect_package {
    _repo="$1"

    _url=$(echo "${_search_url}?pkg=${_package}&ver=${_version}&repo=${_repo}&env=${_branch}&strict=true&human=false" | sed 's@+@%2B@g')
    curl -f -s "${_url}" | grep '"source": "' > /dev/null

    _return=$?

    if [ "${_repo}" == "${_fromrepo}" ]; then
        if [ ${_return} -ne 0 ]; then
            echo -e "\n$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Package ${_package}=${_version} not found in ${_repo}\n"
            usage
        fi
    elif [ "${_repo}" == "${_torepo}" ]; then
        if [ ${_return} -eq 0 ]; then
            echo -e "\n$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Package ${_package}=${_version} already in ${_repo}\n"
            usage
        fi
   fi
}

if [[ ("$(id -u)" != "0") && ("$USER" != "loadbase") ]]; then
    echo -e "\n$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Only root cat bmove files.\n"
    exit 1;
fi

if [ "${#}" -ne 6 ]; then
    echo -e "\n$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Number of arguments are wrong.\n"
    usage
fi

if [ "${_method}" != "-m" -a "${_method}" != "-c" ]; then
    echo "$(date +"i%Y-%m-%d %H:%M:%S"): ERROR: Unknown method '${_method}'. Please use '-c' for copy or '-m' for move."
    usage
fi

if [ "x${_package}" == "x" ]; then
    echo -e "\n$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Package not defined.\n";
    usage
fi

if [ "x${_version}" == "x" ]; then
    echo -e "\n$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Version not defined.\n";
    usage
fi

if [ "x${_fromrepo}" == "x${_torepo}" ]; then
    echo -e "\n$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Destination cannot match source.\n";
    usage
fi

detect_package ${_fromrepo}
detect_package ${_torepo}

bmove
