#!/usr/bin/env bash

# Detect if sudo needed
USER="$(whoami)"
SUDO=""
if [ ! "${USER}" == "root" ];then
  SUDO=$(id -Gn $USER | grep -q docker) || SUDO="sudo "
fi

DOCKER="${SUDO}docker"
COMPOSE="${SUDO}docker-compose"

function die () {
    echo >&2 "$@"
    exit 1
}

if [ $# -gt 0 ];then

  if [ "$1" == "test" ]; then
    shift 1
    ${COMPOSE} run --rm -w /var/www \
        -u $(id -u):www-data \
        web_server \
        vendor/bin/codecept run --env platform,ml_disabled "$@"

  elif [ "$1" == "artisan" ]; then
    shift 1
    ${COMPOSE} run --rm -w /var/www \
        -u $(id -u):www-data \
        web_server \
        php artisan "$@"

  elif [ "$1" == "composer" ]; then
    shift 1
    ${COMPOSE} run --rm -w /var/www \
        -u $(id -u):www-data \
        web_server \
        composer "$@"

  elif [ "$1" == "npm" ]; then
    shift 1
    ${COMPOSE} run --rm -w /var/www \
        -u $(id -u):www-data \
        node_server \
        npm "$@"

  elif [ "$1" == "gulp" ]; then
    shift 1
    ${COMPOSE} run -T --rm -w /var/www \
        -u $(id -u):www-data \
        node_server \
        ./node_modules/.bin/gulp "$@"

  elif [ "$1" == "link" ]; then
    shift 1
    ./scripts/link_package.sh "$@"

  elif [ "$1" == "clean" ]; then
    shift 1
    ${DOCKER} volume ls -qf dangling=true | xargs -r ${DOCKER} volume rm
    ${DOCKER} images -q --no-trunc | xargs -r ${DOCKER} rmi || true

  elif [ "$1" == "db-dump" ]; then
    shift 1
    [ ! -z $1 ] || die "Please specify database name"
    ${COMPOSE} exec db_server sh -c "pg_dump -U postgres --clean --if-exists --no-owner $1 | gzip > /backups/$1_$(date +%Y%m%d_%H%M).sql.gz"

  elif [ "$1" == "db-restore" ]; then
    shift 1
    [ ! -z $1 ] || die "Please specify database name"
    [ ! -z $2 ] || die "Please specify dump path"
    ${COMPOSE} exec db_server sh -c "gunzip -c /$2 | psql -U postgres --single-transaction -a $1"

  elif [ "$1" == "generate-cert" ]; then
    shift 1
    echo $1 | grep -E -q '^localhost$|^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$' || die "Not valid domain"
    if [ "$2" == "dhparam" ]; then
        openssl dhparam -out ./.server/ssl/$1.dhparam.pem 2048
    fi
    openssl req -x509 -newkey rsa:4086 \
    -subj "/C=PL/ST=XXXX/L=XXXX/O=GrupaZero/CN=$1" \
    -keyout ./.server/ssl/$1.key \
    -out ./.server/ssl/$1.crt \
    -days 3650 -nodes -sha256
  else
      ${COMPOSE} "$@"
  fi
else
  ${COMPOSE} ps
fi