#!/bin/bash

# Dieses Skript sucht nach Zeilen, die ein bestimmtes Muster enthalten,
# extrahiert diese und fügt sie in der Zieldatei nach einer Zeile ein,
# die ein anderes Muster enthält.

# This script searches for lines containing a specific pattern,
# extracts them and inserts them into the target file after a line
# containing a different pattern.

#See: https://qelectrotech.org/forum/viewtopic.php?pid=22400#p22400

set -x

# Konfiguration
SourceDir="Antoni/"
DestDir="QET/"
# Muster, das in der Quelldatei gesucht wird, um Zeilen zu extrahieren
# Pattern searched for in the source file to extract lines

SOURCE_PATTERN="<name lang=\"ca\">"
# Muster, das in der Zieldatei gesucht wird, um die Einfügeposition zu finden (Einfügen erfolgt NACH dieser Zeile)
# Pattern searched for in the target file to find the insertion position (insertion takes place AFTER this line)

DEST_PATTERN="<names>"

# und nun in einer Schleife alle Element-Dateien bearbeiten
# and now process all element files in a loop

for SOURCE_FILE in  `find ./$SourceDir -name "*.elmt"` ; do
  DEST_FILE=${SOURCE_FILE/"$SourceDir"/"$DestDir"}
  # zur Kontrolle die Dateinamen aufschreiben
  #echo "Source: $SOURCE_FILE --> Destination: $DEST_FILE"
  # wenn die Ziel-Datei ncht existiert --> weiter!

  # Write down the file names for verification purposes.
  #echo ‘Source: $SOURCE_FILE --> Destination: $DEST_FILE’
  # If the destination file does not exist --> continue!

  if [ ! -e "$DEST_FILE" ]; then
    echo "Destination-File '$DEST_FILE' does not exist --> use next SourceFile"
    continue
  fi
  # Wenn in der Ziel-Datei schon eine Zeile mit dem Muster existiert, dann nicht (!) einfügen
  # If a line with the pattern already exists in the target file, do not (!) insert it.

  LineInDestFile=$(grep "$SOURCE_PATTERN" "$DEST_FILE")
  if [ -n "$LineInDestFile" ]; then
      echo "Line with '$SOURCE_PATTERN' already exists in '$DEST_FILE'!"
      continue
  fi
  # Zeile(n) aus der Quelldatei extrahieren, die dem Muster entsprechen
  # Extract line(s) from the source file that match the pattern

  LINES_TO_INSERT=$(grep "$SOURCE_PATTERN" "$SOURCE_FILE")
  # Überprüfen, ob überhaupt Zeilen gefunden wurden
  # Check whether any lines were found at all
  if [ -z "$LINES_TO_INSERT" ]; then
    echo "Could not find '$SOURCE_PATTERN' in '$SOURCE_FILE'!"
    continue
  fi
  # die extrahierten Zeilen in die Zieldatei einfügen
  # --> sed mit der Option 'a' (append/anhängen nach der passenden Zeile)
  #     die Variable LINES_TO_INSERT kann mehrere Zeilenumbrüche enthalten: Formatieren für sed
  #     Zeilenumbrüche (\n) ersetzen durch das sed-spezifische Escaping (Backslash + tatsächlicher Zeilenumbruch)

  # Insert the extracted lines into the target file.
  # --> sed with the “a” option (append after the matching line).
  #     The variable LINES_TO_INSERT may contain multiple line breaks: Format for sed
  #     Replace line breaks (\n) with sed-specific escaping (backslash + actual line break)

  FORMATTED_INSERT=$(echo "$LINES_TO_INSERT" | sed 's/$/\\/')
  FORMATTED_INSERT=${FORMATTED_INSERT%\\} # letzten, unnötigen Backslash entfernen
                                          # Remove last, unnecessary backslash

  # sed-Befehl: Finde das Muster in der Zieldatei (/DEST_PATTERN/), hänge die formatierten Zeilen an (a\)
  # sed -i bearbeitet die Datei direkt.

  # sed command: Find the pattern in the target file (/DEST_PATTERN/), append the formatted lines (a\)
  # sed -i edits the file directly.

  sed -i "/$DEST_PATTERN/a\\
  $FORMATTED_INSERT" "$DEST_FILE"

  echo "Lines with '$SOURCE_PATTERN' have been inserted after '$DEST_PATTERN' in '$DEST_FILE'."

  # zum Schluss räumen wir die frisch ergänzte Datei ein wenig auf
  # und sortieren die Übersetzungen nach Länder-Kürzel:

  # Finally, we tidy up the newly supplemented file a little
  # and sort the translations by country code:
  # https://github.com/plc-user/QET_ElementScaler.git
  /usr/local/bin/QET_ElementScaler --OverwriteOriginal --OnlyCleanMeta "$DEST_FILE"

  done
