#!/bin/bash
# SPDX-FileCopyrightText: 2026 Andreas Itzchak ("Izzy") Rehberg <izzysoft@qumran.org>
# SPDX-License-Identifier: AGPL-3.0-or-later
# get details on removed apps from archived metadata files

set -euo pipefail

# find real path to this script
if [[ "$0" != "${BASH_SOURCE[0]}" ]]; then
  BASEDIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" #"
else
  BASEDIR="$(realpath "$(dirname "$(readlink -mn "${0}")")")"
fi

# helper to send error messages to STDERR
printerr() { printf "%s\n" "$*" >&2; }

# -------------=[ make sure we can read the config file ]=--
if [[ ! -f "${BASEDIR}/appstats_config.json" ]]; then
  printerr "ERROR: config file 'appstats_config.json' not found, aborting."
  exit 5
fi

# -------------------------------------------=[ Config ]=---
OUTDIR="$(realpath "$(jq -r '.outdir' appstats_config.json)")" #"
RESFILE="${OUTDIR}/removed_apps.csv"
ARCHIVEDIR="$(jq -r '.metaarchive' appstats_config.json)"
# ------------------------------------------=[ /Config ]=---

# ----------------=[ make sure all required paths exist ]=--
if [[ ! -d "${OUTDIR}" ]]; then
  printerr "ERROR: output directory '${OUTDIR}' does not exist, aborting."
  exit 4
fi
if [[ ! -d "${ARCHIVEDIR}" ]]; then
  printerr "ERROR: Archive directory '${ARCHIVEDIR}' does not exist, aborting."
  exit 4
fi


# ----------------
# --    MAIN    --
# ----------------
pushd "${ARCHIVEDIR}" >/dev/null
TMPFILE=$(mktemp)
TMPRESFILE=$(mktemp)
# shellcheck disable=SC2064
trap "rm -f -- '$TMPFILE' '$TMPRESFILE'" ERR
cat /dev/null > "$TMPFILE"

# process old TXT metadata
for meta in $(grep -E "^AppRemoved:" *.txt | awk -F":" '{print $1}'); do
  rline="$(sed -rn 's/^AppRemoved:(\S+)\s*(.*)$/"\1";"\2"/p' "${meta}")"
  appid="$(basename "${meta}" .txt)"
  aname="$(grep -Ei '^name:' "${meta}" | awk -F: '{print $NF}')" || aname=""
  echo "\"${appid}\";\"${aname}\";${rline}" >> "${TMPFILE}"
done

# process YAML metadata
for meta in $(grep -E "^\s*AppRemoved:" *.yml | awk -F":" '{print $1}'); do
  rline="$(sed -rn 's/^\s*AppRemoved:\s*(\S+)\s*(.*)$/"\1";"\2"/p' "${meta}")"
  appid="$(basename "${meta}" .yml)"
  aname="$(grep -Ei '^(auto)?name:' "${meta}" | awk -F": " '{print $NF}' | head -n 1)" || aname=""
  echo "\"${appid}\";\"${aname}\";${rline}" >> "${TMPFILE}"
done

# generate output file
echo '"appid";"appname";"date";"reason"' > "${TMPRESFILE}"
sort -rt ";" -k 3 < "${TMPFILE}" >> "${TMPRESFILE}" # reverse sorting on date column

if [[ -f "${RESFILE}" && $(stat --printf="%s" "${TMPRESFILE}") -lt $(stat --printf="%s" "${RESFILE}") ]]; then
  printerr "WARNING: resulting CSV file is smaller than original file!"
fi

rm "${TMPFILE}"
mv "${TMPRESFILE}" "${RESFILE}"
popd >/dev/null
