#!/bin/sh

export COMPOSE_FILE_PATH="${PWD}/target/classes/docker/docker-compose.yml"

if [ -z "${M2_HOME}" ]; then
  export MVN_EXEC="mvn"
else
  export MVN_EXEC="${M2_HOME}/bin/mvn"
fi

start() {
    docker volume create alfmarkdown-acs-volume
    docker volume create alfmarkdown-db-volume
    docker volume create alfmarkdown-ass-volume
    docker-compose -f "$COMPOSE_FILE_PATH" up --build -d
}

start_share() {
    docker-compose -f "$COMPOSE_FILE_PATH" up --build -d alfmarkdown-share
}

start_acs() {
    docker-compose -f "$COMPOSE_FILE_PATH" up --build -d alfmarkdown-acs
}

start_tengine() {
    docker-compose -f "$COMPOSE_FILE_PATH" up --build -d alfmarkdown-tengine
}

start_adw() {
    docker-compose -f "$COMPOSE_FILE_PATH" up --build -d alfmarkdown-adw
}

down() {
    if [ -f "$COMPOSE_FILE_PATH" ]; then
        docker-compose -f "$COMPOSE_FILE_PATH" down
    fi
}

purge() {
    docker volume rm -f alfmarkdown-acs-volume
    docker volume rm -f alfmarkdown-db-volume
    docker volume rm -f alfmarkdown-ass-volume
}

build() {
    $MVN_EXEC -Pdocker clean package
}

build_share() {
    docker-compose -f "$COMPOSE_FILE_PATH" kill alfmarkdown-share
    yes | docker-compose -f "$COMPOSE_FILE_PATH" rm -f alfmarkdown-share
    $MVN_EXEC clean package -pl share,share-docker
}

build_acs() {
    docker-compose -f "$COMPOSE_FILE_PATH" kill alfmarkdown-acs
    yes | docker-compose -f "$COMPOSE_FILE_PATH" rm -f alfmarkdown-acs
    $MVN_EXEC clean package -pl integration-tests,repo,platform-docker
}

build_tengine() {
    docker-compose -f "$COMPOSE_FILE_PATH" kill alfmarkdown-tengine
    yes | docker-compose -f "$COMPOSE_FILE_PATH" rm -f alfmarkdown-tengine
    $MVN_EXEC clean package -Pdocker -pl tengine
}

tail() {
    docker-compose -f "$COMPOSE_FILE_PATH" logs -f
}

tail_all() {
    docker-compose -f "$COMPOSE_FILE_PATH" logs --tail="all"
}

prepare_test() {
    $MVN_EXEC verify -DskipTests=true -pl repo,tengine,integration-tests,platform-docker
}

test() {
    $MVN_EXEC verify -pl repo,tengine,integration-tests
}

case "$1" in
  build_start)
    down
    build
    start
    tail
    ;;
  build_start_it_supported)
    down
    build
    prepare_test
    start
    tail
    ;;
  start)
    start
    tail
    ;;
  stop)
    down
    ;;
  purge)
    down
    purge
    ;;
  tail)
    tail
    ;;
  reload_share)
    build_share
    start_share
    tail
    ;;
  reload_acs)
    build_acs
    start_acs
    tail
    ;;
  reload_tengine)
    build_tengine
    start_tengine
    tail
    ;;
  build_test)
    down
    build
    prepare_test
    start
    test
    tail_all
    down
    ;;
  test)
    test
    ;;
  *)
    echo "Usage: $0 {build_start|build_start_it_supported|start|stop|purge|tail|reload_tengine|reload_share|reload_acs|build_test|test}"
esac