#!/bin/bash
# checkFilestore <UUID> — compare container filestore vs host disk via md5

check_one() {
local UUID="$1"

FILESTORE_HOST="/4server/data/$UUID/odoo/odoo-web-data/filestore/$UUID"

[[ -d "$FILESTORE_HOST" ]] || { echo "ERROR: host filestore not found: $FILESTORE_HOST"; exit 2; }
doas docker ps --format "{{.Names}}" | grep -q "^${UUID}$" \
    || { echo "ERROR: container $UUID is not running"; exit 2; }

# Read data_dir from odoo.conf inside the container, fall back to default
DATA_DIR=$(doas docker exec "$UUID" sh -c \
    'for f in /etc/odoo.conf /etc/odoo/odoo.conf /opt/odoo/etc/odoo.conf; do
         grep -E "^data_dir" "$f" 2>/dev/null | cut -d= -f2- | xargs && break
     done')
DATA_DIR="${DATA_DIR:-/home/odoo/.local/share/Odoo}"
FILESTORE_CONTAINER="$DATA_DIR/filestore/$UUID"
MOUNT_HOST=$(doas docker inspect "$UUID" --format '{{json .Mounts}}' \
    | jq -r --arg dest "$DATA_DIR" '.[] | select(.Type=="bind") | select(.Destination==$dest) | .Source')
echo "ODOO USES        : $FILESTORE_CONTAINER"
echo "Docker maps to   : $DATA_DIR"
echo ""
echo "Docker mapped to : ${MOUNT_HOST:-<no matching mount found>}"

echo "Hashing container filestore..."
MD5_CONTAINER=$(doas docker exec "$UUID" sh -c \
    "find $FILESTORE_CONTAINER -type f | sort | xargs md5sum 2>/dev/null | awk '{print \$1}'" | md5sum | cut -d' ' -f1)

echo "Hashing host filestore..."
MD5_HOST=$(find "$FILESTORE_HOST" -type f | sort | xargs md5sum 2>/dev/null | awk '{print $1}' | md5sum | cut -d' ' -f1)

echo "Container : $MD5_CONTAINER"
echo "Host      : $MD5_HOST"

[[ "$MD5_CONTAINER" == "$MD5_HOST" ]] && echo "OK: filestores match" || { echo "FAIL: mismatch"; return 3; }
}

if [[ -n "${1-}" ]]; then
    check_one "$1"
else
    for dir in /4server/data/00*/; do
        UUID=$(basename "$dir")
        result=$(check_one "$UUID" 2>&1)
        if echo "$result" | grep -q "OK: filestores match"; then
            echo "$UUID  OK"
        elif echo "$result" | grep -q "not running"; then
            echo "$UUID  NOT RUNNING"
        elif echo "$result" | grep -q "host filestore not found"; then
            echo "$UUID  NO FILESTORE"
        elif echo "$result" | grep -q "cannot query DB"; then
            echo "$UUID  DB ERROR"
        else
            echo "$UUID  MISMATCH"
        fi
    done
fi
