#!/usr/bin/env bash
set -e

script=$(basename "$0")
version="1.1.0"

help() {
    echo
    echo "$script v$version"
    echo
    echo 'Description: Backup Odoo database in Kubernetes cluster.'
    echo "Syntax: $script <label> <database> <path>"
    echo "Example: $script odoo odoo ./tmp/odoo.tar"
    echo "         $script odoo odoo ./tmp/"
    echo 'Options:'
    echo "  help  Show $script manual."
    echo
}

if [[ "$1" == 'help' ]]; then
    help
    exit 0
fi

label="$1"
database="$2"
path="$3"

[[ -z "$label" ]] && { echo 'Error: Parameter label is empty'; exit 1; }
[[ -z "$database" ]] && { echo 'Error: Parameter database is empty'; exit 1; }
[[ -z "$path" ]] && { echo 'Error: Parameter path is empty'; exit 1; }

if [[ -d "$path" ]]; then
    path="${path%/}/${database}.tar"
fi

echo "Search for pod with label 'app=$label'"
pod_id=$(kubectl get pods -l app="$label" -o jsonpath='{.items[0].metadata.name}' 2>/dev/null)

if [[ -z "$pod_id" ]]; then
    echo "Error: No pod found with label '$label'"
    exit 1
fi

echo "Found pod: $pod_id"

output_dir=$(dirname "$path")
if [[ ! -d "$output_dir" ]]; then
    mkdir -p "$output_dir"
fi

echo "Stream database $database backup to $path"

kubectl exec "$pod_id" -- /bin/bash -c "
    set -e
    cleanup() { rm -f /var/lib/odoo/dump.sql; }
    trap cleanup EXIT
    pg_dump '$database' > /var/lib/odoo/dump.sql
    tar -cf - --transform='s|^filestore/'"$database"'|filestore|' -C /var/lib/odoo dump.sql filestore/"$database"
" > "$path"

echo "The Odoo backup has finished: $path"
