#!/bin/bash

# Set array variables

DATABASE_LIST=(
    "nextcloud"
    "gitea"
    "mastodon-db"
    "synapse"
    "mas"
    "mss"
    "coturn"
    "keycloak"
    "signal-bridge"
    "whatsapp-bridge"
    "telegram-bridge"
    "discord-bridge"
    "facebook-bridge"
)

# Notify shutdown commencement

/scripts/notify.sh "Shutdown initiated on host $HOSTNAME."

# Scale keycloak first

kubectl -n public scale deployment keycloak-operator --replicas=0
kubectl -n public scale statefulset keycloak --replicas=0

# Scale all deployments to 0

kubectl -n private scale deployment --all --replicas=0
kubectl -n public scale deployment --selector=delayed.shutdown!=enabled --replicas=0 # Leave ntfy running
kubectl -n db scale deployment --all --replicas=0

# Notify scaling complete

/scripts/notify.sh "Application scale down complete."

# Hibernate all databases

DB_INDEX=1
DB_TOTAL=${#DATABASE_LIST[@]}
for DB in "${DATABASE_LIST[@]}"; do
    echo "Hibernating database $DB_INDEX/$DB_TOTAL ($DB)..."
    kubectl cnpg hibernate on $DB -n db
    DB_INDEX=$((DB_INDEX+1))
done

# Notify hibernation complete

/scripts/notify.sh "Database hibernations complete, initiating final shutdown."

# Scale the last deployments (ntfy + dns)

kubectl -n public scale deployment --selector=delayed.shutdown=enabled --replicas=0
kubectl -n dns scale deployment bind --replicas=0

# Cordon node

kubectl cordon kube00

# Drain remaining pods

kubectl drain kube00 --ignore-daemonsets --delete-local-data

# Shutdown upsmon to notify the UPS primary that secondary shutdown has finished

systemctl stop nut-monitor.service

# shutdown

poweroff