#!/usr/bin/env bash

if [[ ! $# -eq 0 ]] ; then
    echo "Usage: $0"
    exit 1
fi

bin/composer install --quiet
[[ $? -ne 0 ]] && exit 1

rm -rf var/smoke-test/bundles/*Bundle/
if [[ ! -d var/smoke-test/bundles/base ]] ; then
    mkdir -p var/smoke-test/bundles/base
fi

pushd var/smoke-test/bundles/base &> /dev/null
if [[ -f composer.lock ]] ; then
    composer update --prefer-dist --quiet
else
    composer create-project --prefer-dist --quiet symfony/skeleton . && \
    composer config extra.symfony.allow-contrib true && \
    composer require --prefer-dist --quiet orm
fi
[[ $? -ne 0 ]] && exit 1
popd &> /dev/null

BASE_DIR="$(cd $(dirname $(dirname "$0")) && pwd)"
PACKAGER=""
if [[ -f "${BASE_DIR}/packages.json" ]] ; then
    PACKAGER="${PACKAGER}composer config repositories.main composer file://${BASE_DIR}/ && "
elif [[ ! $TRAVIS ]] ; then
    for PACKAGE in $(find src/*/composer.json -type f) ; do
        PACKAGE_NAME=$(grep -E "^\s*\"name\"\s*:\s*\"msgphp\/([^\"]+)\"\s*,\s*$" "${PACKAGE}")
        if [[ ! -z $PACKAGE_NAME ]] ; then
            PACKAGE_NAME=$(echo "${PACKAGE_NAME}" | sed -e "s/^\s*\"name\":\s*\"msgphp\///" -e "s/\"\s*,\s*$//")
            PACKAGER="${PACKAGER}composer config repositories.${PACKAGE_NAME} path ${BASE_DIR}/$(dirname "${PACKAGE}")/ && "
        fi
    done
fi

RETURN=0
for PACKAGE in $(find src/*Bundle/composer.json -type f) ; do
    PACKAGE_NAME=$(grep -E "^\s*\"name\"\s*:\s*\"msgphp\/([^\"]+)\"\s*,\s*$" "${PACKAGE}")
    if [[ ! -z $PACKAGE_NAME ]] ; then
        PACKAGE_NAME=$(echo "${PACKAGE_NAME}" | sed -e "s/^\s*\"name\":\s*\"msgphp\///" -e "s/\"\s*,\s*$//")
        DIR="var/smoke-test/bundles/$(basename $(dirname "${PACKAGE}"))"
        CMD="${PACKAGER}composer require --no-progress --no-suggest --no-interaction "
        for DEP in $(composer show --name-only --working-dir="$(dirname "${PACKAGE}")" | grep msgphp/) ; do
            CMD="${CMD}${DEP}:@dev "
        done
        CMD="${CMD}msgphp/${PACKAGE_NAME}:@dev && \
        bin/console doctrine:schema:validate --skip-sync"

        cp -R var/smoke-test/bundles/base "${DIR}"

        pushd "${DIR}" &> /dev/null
        if [[ $TRAVIS = true ]] ; then
            tfold "Testing ${PACKAGE_NAME}" "${CMD}"
        else
            echo -e "\e[34mTesting ${PACKAGE_NAME}\e[0m"
            bash -xc "${CMD}" 2>&1
        fi
        LAST=$? ; [[ $LAST -ne 0 ]] && RETURN=${LAST}
        popd &> /dev/null
    fi
done

exit ${RETURN}
