#!/bin/sh

# script/setup: Set up container for the first time after cloning

set -e

cd "$(dirname "$0")/.."

script/bootstrap

echo "==> Setting up pod kontor"
if podman pod exists kontor; then
    echo "  => pod kontor exists"
    if podman pod ps --filter "name=kontor" --filter "status=running"; then
        echo "    => pod kontor is running"
    else
        podman pod start kontor
    fi
else
    podman pod create --name kontor \
    --infra \
    -p 5432:5432 \
    -p 8100:8100 \
    -p 8200:8200 \
    -p 8300:8300 \
    -p 8400:8400 \
    -p 8500:8500 \
    -p 8600:8600 \
    -p 8900:8080 \
    -p 61616:61616 \
    -p 8161:8161 \
    -p 5672:5672 \
    --network bridge
fi

echo "==> Setting up volume kontor-db"
if podman volume exists kontor-db; then
    echo "  => volume kontor-db exists"
else
    podman volume create kontor-db
fi

echo "==> Setting up volume activemq-data"
if podman volume exists activemq-data; then
    echo "  => volume kontor-db exists"
else
    podman volume create activemq-data
fi

echo "==> Setting up container postgres"
if podman container exists postgres; then
    if podman ps -q --filter "name=postgres"; then
        echo "  => postgres is running"
    fi
else
    podman run -d --replace --pod kontor --name postgres \
        -e POSTGRES_PASSWORD=kontor \
        -e POSTGRES_DB=kontor \
        -e POSTGRES_USER=kontor \
        -v kontor-db:/var/lib/postgresql/data \
        --health-cmd='pg_isready -U kontor || exit 1' \
        --health-interval=1s \
        --health-timeout=5s \
        --health-retries=10 \
        docker.io/library/postgres:17
fi

echo "==> Setting up container adminer"
if podman container exists adminer; then
    if podman ps -q --filter "name=adminer"; then
        echo "  => adminer is running"
    fi
else
    podman run -d --replace --pod kontor --name adminer docker.io/library/adminer
fi

echo "==> Setting up container activemq"
if podman container exists activemq; then
    if podman ps -q --filter "name=activemq"; then
        echo "  => adminer is running"
    fi
else
    podman run -d --replace --pod kontor --name activemq \
        -v activemq-data:/var/lib/artemis-instance \
        docker.io/apache/activemq-artemis:latest-alpine
fi

echo "==> Setting up container kontor-spring"
if podman image exists localhost/kontor-spring:0.3.0; then
    echo "  => Image localhost/kontor-spring:0.3.0 available"
else
    echo "  => Baue Image localhost/kontor-spring:0.3.0"
    buildah build -t kontor-spring:0.3.0 kontor-spring
fi
if podman container exists kontor-spring; then
    if podman ps -q --filter "name=kontor-spring"; then
        echo "  => kontor-spring is running"
    fi
else
    podman run -d \
        --replace \
        --pod kontor \
        --name kontor-spring \
        --label "io.containers.autoupdate=local" \
        --label "PODMAN_SYSTEMD_UNIT=container-kontor-spring.service" \
        localhost/kontor-spring:0.3.0
fi

echo "==> Setting up container kontor-api"
if podman image exists localhost/kontor-api:0.3.0; then
    echo "  => Image localhost/kontor-api:0.3.0 available"
else
    echo "  => Baue Image localhost/kontor-api:0.3.0"
    buildah build -t kontor-api:0.3.0 kontor-api
fi
if podman container exists kontor-api; then
    if podman ps -q --filter "name=kontor-api"; then
        echo "  => kontor-api is running"
    fi
else
    podman run -d \
        --replace \
        --pod kontor \
        --name kontor-api \
        --label "io.containers.autoupdate=local" \
        --label "PODMAN_SYSTEMD_UNIT=container-kontor-api.service" \
        --health-cmd='curl -f http://kontor-api:8200/health || exit 1' \
        --health-interval=1s \
        --health-timeout=5s \
        --health-retries=10 \
        localhost/kontor-api:0.3.0
fi

echo "==> Setting up container kontor-quarkus"
if podman image exists localhost/kontor-quarkus:0.3.0; then
    echo "  => Image localhost/kontor-quarkus:0.3.0 available"
else
    echo "  => Baue Image localhost/kontor-quarkus:0.3.0"
    buildah build -t kontor-quarkus:0.3.0 kontor-quarkus
fi
if podman container exists kontor-quarkus; then
    if podman ps -q --filter "name=kontor-quarkus"; then
        echo "  => kontor-quarkus is running"
    fi
else
    podman run -d \
        --replace \
        --pod kontor \
        --name kontor-quarkus \
        --label "io.containers.autoupdate=local" \
        --label "PODMAN_SYSTEMD_UNIT=container-kontor-quarkus.service" \
        --health-cmd='curl -f http://kontor-quarkus:8300/q/health || exit 1' \
        --health-interval=1s \
        --health-timeout=5s \
        --health-retries=10 \
        localhost/kontor-quarkus:0.3.0
fi

echo "==> Setting up container kontor-echo"
if podman image exists localhost/kontor-echo:0.3.0; then
    echo "  => Image localhost/kontor-echo:0.3.0 available"
else
    echo "  => Baue Image localhost/kontor-echo:0.3.0"
    buildah build -t kontor-echo:0.3.0 kontor-echo
fi
if podman container exists kontor-echo; then
    if podman ps -q --filter "name=kontor-echo"; then
        echo "  => kontor-echo is running"
    fi
else
    podman run -d \
        --replace \
        --pod kontor \
        --name kontor-echo \
        --label "io.containers.autoupdate=local" \
        --label "PODMAN_SYSTEMD_UNIT=container-kontor-echo.service" \
        --health-cmd='curl -f http://kontor-echo:8400/health || exit 1' \
        --health-interval=1s \
        --health-timeout=5s \
        --health-retries=10 \
        localhost/kontor-echo:0.3.0
fi

echo "==> Setting up container kontor-fiber"
if podman image exists localhost/kontor-fiber:0.3.0; then
    echo "  => Image localhost/kontor-fiber:0.3.0 available"
else
    echo "  => Baue Image localhost/kontor-fiber:0.3.0"
    buildah build -t kontor-fiber:0.3.0 kontor-fiber
fi
if podman container exists kontor-fiber; then
    if podman ps -q --filter "name=kontor-fiber"; then
        echo "  => kontor-fiber is running"
    fi
else
    podman run -d \
        --replace \
        --pod kontor \
        --name kontor-fiber \
        --label "io.containers.autoupdate=local" \
        --label "PODMAN_SYSTEMD_UNIT=container-kontor-fiber.service" \
        --health-cmd='curl -f http://kontor-echo:8500/health || exit 1' \
        --health-interval=1s \
        --health-timeout=5s \
        --health-retries=10 \
        localhost/kontor-fiber:0.3.0
fi

echo "==> Setting up container kontor-javalin"
if podman image exists localhost/kontor-javalin:0.3.0; then
    echo "  => Image localhost/kontor-javalin:0.3.0 available"
else
    echo "  => Baue Image localhost/kontor-javalin:0.3.0"
    buildah build -t kontor-javalin:0.3.0 kontor-javalin
fi

if podman container exists kontor-javalin; then
    if podman ps -q --filter "name=kontor-javalin"; then
        echo "  => kontor-javalin is running"
    fi
else
    podman run -d \
        --replace \
        --pod kontor \
        --name kontor-javalin \
        --label "io.containers.autoupdate=local" \
        --label "PODMAN_SYSTEMD_UNIT=container-kontor-javalin.service" \
        --health-cmd='curl -f http://kontor-echo:8600/health || exit 1' \
        --health-interval=1s \
        --health-timeout=5s \
        --health-retries=10 \
        localhost/kontor-javalin:0.3.0
fi
