#!/bin/bash


if [ -z "$BACKEND" ]
then
    echo "Variable 'BACKEND' must be set."
    exit 1
fi

DEBUG="${DEBUG:-true}"
ADMIN_PASSWORD="${ADMIN_PASSWORD:-changeme}"
DB_NAME="${DB_NAME:-ottertune}"
DB_PASSWORD="${DB_PASSWORD:-ottertune}"

if [ "$BACKEND" = "mysql" ]; then
    DB_USER="${DB_USER:-root}"
    DB_PORT="${DB_PORT:-3306}"
else
    DB_USER="${DB_USER:-postgres}"
    DB_PORT="${DB_PORT:-5432}"
fi

WEB_ENTRYPOINT="${WEB_ENTRYPOINT:-./start.sh}"

file="$(test -z "$1" && echo "docker-compose.$BACKEND.yml" || echo "$1")"


cat > $file <<- EOM
version: "3"
services:

    web:
        image: ottertune-web
        container_name: web
        expose:
          - "8000"
        ports:
          - "8000:8000"
        links:
          - backend
          - rabbitmq
        depends_on:
          - backend
          - rabbitmq
        environment:
          DEBUG: '$DEBUG'
          ADMIN_PASSWORD: '$ADMIN_PASSWORD'
          BACKEND: '$BACKEND'
          DB_NAME: '$DB_NAME'
          DB_USER: '$DB_USER'
          DB_PASSWORD: '$DB_PASSWORD'
          DB_HOST: 'backend'
          DB_PORT: '$DB_PORT'
          MAX_DB_CONN_ATTEMPTS: 30
          RABBITMQ_HOST: 'rabbitmq'
        working_dir: /app/website
        entrypoint: $WEB_ENTRYPOINT
        labels:
          NAME: "ottertune-web"
        networks:
          - ottertune-net

    driver:
        image: ottertune-driver
        container_name: driver
        depends_on:
          - web
        environment:
          DEBUG: '$DEBUG'
        working_dir: /app/driver
        labels:
          NAME: "ottertune-driver"
        networks:
          - ottertune-net

    rabbitmq:
        image: "rabbitmq:3-management"
        container_name: rabbitmq
        restart: always
        hostname: "rabbitmq"
        environment:
           RABBITMQ_DEFAULT_USER: "guest"
           RABBITMQ_DEFAULT_PASS: "guest"
           RABBITMQ_DEFAULT_VHOST: "/"
        expose:
           - "15672"
           - "5672"
        ports:
           - "15673:15672"
           - "5673:5672"
        labels:
           NAME: "rabbitmq"
        networks:
          - ottertune-net

EOM


cat >> $file <<- EOM
    backend:
        container_name: backend
        restart: always
EOM


if [ "$BACKEND" = "mysql" ]; then

cat >> $file <<- EOM
        image: mysql:5.7
        environment:
          MYSQL_USER: '$DB_USER'
          MYSQL_ROOT_PASSWORD: '$DB_PASSWORD'
          MYSQL_PASSWORD: '$DB_PASSWORD'
          MYSQL_DATABASE: '$DB_NAME'
        expose:
          - "3306"
        ports:
          - "3306:3306"
EOM
else
cat >> $file <<- EOM
        image: postgres:9.6
        environment:
          POSTGRES_PASSWORD: '$DB_PASSWORD'
          POSTGRES_USER: '$DB_USER'
          POSTGRES_DB: '$DB_NAME'
        expose:
          - "5432"
        ports:
          - "5432:5432"
EOM
fi

cat >> $file <<- EOM
        labels:
          NAME: "ottertune-backend"
        networks:
          - ottertune-net

networks:
   ottertune-net:
      driver: bridge
EOM

echo "Saved docker-compose file to '$file'."