#!/usr/bin/env bash

# Get script directory and determine app name
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
APPNAME="$(basename "$PROJECT_DIR")"

echodo() {
  echo "${@}"
  ${@}
}

# Prepare transifex
if [ ! -s  .tx/config ]; then
   mkdir -p .tx
   cat <<EOF > .tx/config
[main]
host = https://www.transifex.com

[o:anticapitalista:p:antix-development:r:$APPNAME]
file_filter = ./${APPNAME}_<lang>.ts
source_file = ${APPNAME}_en.ts
source_lang = en
type        = ts
minimum_perc = 25
EOF
fi

# Migrate percent checking
if [ -z "$(grep minimum_perc .tx/config)" ]; then
        echo "minimum_perc = 25" >> .tx/config
fi

# Remove existing translations
find . -type f -name '*.ts' -not -name '*en.ts' -delete

# Get all translations
if command -v tx >/dev/null; then
   echodo tx pull -r antix-development.$APPNAME --all
fi

# en_US duplicates the English source catalog and should not be shipped.
rm -f "${APPNAME}_en_US.ts"

# Find lupdate command in common locations
LUPDATE=""
for cmd in lupdate lupdate-qt6 /usr/lib/qt6/bin/lupdate /usr/bin/lupdate /usr/local/bin/lupdate; do
    if command -v "$cmd" >/dev/null 2>&1; then
        LUPDATE="$cmd"
        break
    fi
done

if [ -z "$LUPDATE" ]; then
    echo "Error: lupdate command not found. Please install Qt development tools."
    exit 1
fi

echo "Using lupdate: $LUPDATE"

# Update the English source catalog from the application sources: src/ when the
# project has one, otherwise the files at the project root (not recursive, so
# build output is never scanned).
if [ -d "$PROJECT_DIR/src" ]; then
    mapfile -t SOURCE_FILES < <(find "$PROJECT_DIR/src" \( -name "*.cpp" -o -name "*.h" -o -name "*.ui" \) | sort)
else
    mapfile -t SOURCE_FILES < <(find "$PROJECT_DIR" -maxdepth 1 \( -name "*.cpp" -o -name "*.h" -o -name "*.ui" \) | sort)
fi
if [ ${#SOURCE_FILES[@]} -eq 0 ]; then
    echo "Error: no source files found in $PROJECT_DIR"
    exit 1
fi
"$LUPDATE" "${SOURCE_FILES[@]}" -ts "$SCRIPT_DIR/${APPNAME}_en.ts"
