#!/bin/bash

# webservice container
IMAGE_NAME="registry.bht-berlin.de:443/masi9606/webservice:dev"
CONTAINER_NAME="webservice_container"
CONTAINER_HTTP_PORT="8080"
CONTAINER_HTTPS_PORT="8443"
NGINX_CONF="/etc/nginx/sites-available/default"
CERT_DIR="/etc/nginx/certs"
WEB_SERVICE_DOMAIN="webservice.local" 

# prometheus container
PROMETHEUS_IMAGE="prom/prometheus:latest"
PROMETHEUS_CONTAINER_NAME="prometheus_monitor"
PROMETHEUS_PORT="9090"
PROMETHEUS_DOMAIN="monitoring.local" 
PROMETHEUS_CONFIG_FILE="prometheus.yml"

# local network
NETWORK_NAME="dev_network"

# Stop old containers
podman stop $CONTAINER_NAME
podman rm -f $CONTAINER_NAME
podman stop $PROMETHEUS_CONTAINER_NAME
podman rm -f $PROMETHEUS_CONTAINER_NAME

# Pull images
podman pull $IMAGE_NAME
podman pull $PROMETHEUS_IMAGE

# Run webservice container
podman run -d \
  --name "$CONTAINER_NAME" \
  --network "$NETWORK_NAME" \
  --ip "10.89.0.2" \
  -p "$CONTAINER_HTTP_PORT:$CONTAINER_HTTP_PORT" \
  -p "$CONTAINER_HTTPS_PORT:$CONTAINER_HTTPS_PORT" \
  "$IMAGE_NAME"

# Install packages
podman exec -it $CONTAINER_NAME apt-get update
podman exec -it $CONTAINER_NAME apt-get install -y openssl nginx systemctl curl

# Generate SSL certificate and key
podman exec -it $CONTAINER_NAME bash -c "mkdir -p $CERT_DIR && \
    openssl req -x509 -nodes -days 365 -newkey rsa:4096 \
    -keyout $CERT_DIR/nginx.key -out $CERT_DIR/nginx.crt \
    -subj '/CN=$WEB_SERVICE_DOMAIN'"

podman cp default.conf $CONTAINER_NAME:$NGINX_CONF

# Restart Nginx to apply the changes
podman exec -it $CONTAINER_NAME systemctl restart nginx

# Wait
podman exec -it $CONTAINER_NAME sleep 5

# Add entry to /etc/hosts
podman exec -it $CONTAINER_NAME bash -c "echo '127.0.0.1 $WEB_SERVICE_DOMAIN' >> /etc/hosts"

echo "Testing from inside..."
podman exec -it $CONTAINER_NAME curl -k https://$WEB_SERVICE_DOMAIN:$CONTAINER_HTTPS_PORT/

echo "Testing from outside..."
sudo bash -c "echo '127.0.0.1 $WEB_SERVICE_DOMAIN' >> /etc/hosts"
curl -k https://$WEB_SERVICE_DOMAIN:$CONTAINER_HTTPS_PORT/

echo "Testing Redis..."
curl -k -X PUT --header 'Content-Type: text/plain; charset=utf-8' --data 'foo' https://$WEB_SERVICE_DOMAIN:$CONTAINER_HTTPS_PORT/state/bar

# Check the value in the database
podman exec -it $CONTAINER_NAME redis-cli KEYS '*'

# Run Prometheus container
podman run -d \
  --name $PROMETHEUS_CONTAINER_NAME \
  --network $NETWORK_NAME --ip "10.89.0.3" \
  -p $PROMETHEUS_PORT:$PROMETHEUS_PORT \
  -v $PWD/$PROMETHEUS_CONFIG_FILE:/etc/prometheus/prometheus.yml:Z \
  $PROMETHEUS_IMAGE --config.file=/etc/prometheus/prometheus.yml

# Test Prometheus
sudo bash -c "echo '127.0.0.1 $PROMETHEUS_DOMAIN' >> /etc/hosts"
curl http://$PROMETHEUS_DOMAIN:$PROMETHEUS_PORT/