#!/bin/bash
set -eu

cd "${0%/*}"

langdirs=(app/src/main/res/values-?? app/src/main/res/values-??-r??)
readarray -td '' langdirs < <(printf '%s\0' "${langdirs[@]}" | sort -z)

count_strings() {
  code=$1
  [[ -n "$code" ]] && code="-$code"
  grep -h -c "</string>" "app/src/main/res/values$code/"{strings,preference}.xml "libraries/humla/src/main/res/values$code/strings.xml" \
    | awk '{s+=$1} END {print s}'
}

en=$(count_strings "")

declare -a langs
declare -a excluded
for lang in "${langdirs[@]}"; do
  lang=${lang##*/}
  lang=${lang#values-}
  percent=$(( $(count_strings "$lang") * 100 / en ))
  if (( percent < 40 )); then
    excluded+=("$lang($percent%)")
  elif (( percent < 99 )); then
    langs+=("$lang($percent%)")
  else
    langs+=("$lang")
  fi
done
langs+=("en-US")
printf "Included languages: %s\n" "${langs[*]}"
printf "Excluded languages: %s\n" "${excluded[*]}"

IFS=$'\n' langssorted=($(sort <<<"${langs[*]}")); unset IFS

localf=app/src/main/res/xml/local_config.xml
cat >"$localf" <<-EOF
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
EOF
for lang in "${langssorted[@]}"; do
  lang="${lang%%(*}"
  # Must not have an "r" there for the locales we support
  lang="${lang//-r/-}"
  printf >>"$localf" '    <locale android:name="%s" />\n' "$lang"
done
printf >>"$localf" "</locale-config>\n"
printf "Wrote %s\n" "$localf"

langf=app/src/main/res/values/language_notranslate.xml
cat >"$langf" <<-EOF
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="languageValues">
EOF
for lang in "${langssorted[@]}"; do
  lang="${lang%%(*}"
  # Must not have an "r" there for the preference display
  lang="${lang//-r/-}"
  if [[ "$lang" = "en-US" ]]; then
    lang="en"
  fi
  printf >>"$langf" '        <item>%s</item>\n' "$lang"
done
cat >>"$langf" <<-EOF
    </string-array>
</resources>
EOF
printf "Wrote %s\n" "$langf"

printf "Running git diff %s %s\n" "$localf" "$langf"
git diff "$localf" "$langf"
