name: Update MaxMind GeoLite2 DBs

on:
  workflow_dispatch: # Ermöglicht manuelles Starten
  schedule:
    - cron: '0 0 1 * *'

jobs:
  update-db:
    runs-on: ubuntu-latest
    # Berechtigung, um Änderungen zurück ins Repo zu pushen
    permissions:
      contents: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          lfs: true # Wichtig: LFS-Dateien beim Checkout herunterladen

      - name: Download geoipupdate tool
        run: |
          # Lade eine spezifische Version oder die neueste herunter
          GEOIPUPDATE_VERSION="4.11.1"
          wget "https://github.com/maxmind/geoipupdate/releases/download/v${GEOIPUPDATE_VERSION}/geoipupdate_${GEOIPUPDATE_VERSION}_linux_amd64.tar.gz"
          tar -zxvf "geoipupdate_${GEOIPUPDATE_VERSION}_linux_amd64.tar.gz"
          # Verschiebe das Binary in einen bekannten Pfad und mache es ausführbar
          sudo mv "geoipupdate_${GEOIPUPDATE_VERSION}_linux_amd64/geoipupdate" /usr/local/bin/
          sudo chmod +x /usr/local/bin/geoipupdate
          # Überprüfe die Version
          geoipupdate -V

      - name: Create GeoIP.conf
        # Erstellt die Konfigurationsdatei für geoipupdate mit den Secrets
        run: |
          echo "Creating GeoIP.conf..."
          cat << EOF > GeoIP.conf
          # GeoIP.conf file for geoipupdate
          AccountID ${{ secrets.MAXMIND_ACCOUNT_ID }}
          LicenseKey ${{ secrets.MAXMIND_LICENSE_KEY }}

          # Specify the editions to download
          EditionIDs GeoLite2-ASN GeoLite2-City
          EOF
          echo "GeoIP.conf created."
        env:
          MAXMIND_ACCOUNT_ID: ${{ secrets.MAXMIND_ACCOUNT_ID }}
          MAXMIND_LICENSE_KEY: ${{ secrets.MAXMIND_LICENSE_KEY }}

      - name: Run geoipupdate
        run: |
          echo "Running geoipupdate..."
          # Lädt die Datenbanken nach ./backend/data herunter
          geoipupdate -f GeoIP.conf -d ./backend/data -v
          echo "geoipupdate finished."

      - name: Configure Git and LFS
        run: |
          git config --global user.name 'github-actions[bot]'
          git config --global user.email 'github-actions[bot]@users.noreply.github.com'
          # Installiere Git LFS Hooks für diesen Run
          git lfs install

      - name: Track and Commit changes (LFS)
        run: |
          # Sage Git, dass .mmdb Dateien mit LFS verwaltet werden sollen
          git lfs track "backend/data/*.mmdb"
          
          # Füge .gitattributes (hier steht die LFS-Konfiguration drin) hinzu
          git add .gitattributes
          
          # Füge die eigentlichen Datenbank-Dateien hinzu
          git add ./backend/data/*.mmdb

          # Prüfe, ob Änderungen zum Committen vorliegen (staged changes)
          if git diff --staged --quiet; then
            echo "No changes detected in MaxMind databases."
          else
            echo "Changes detected. Committing..."
            COMMIT_DATE=$(date -u +"%Y-%m-%d")
            git commit -m "Update MaxMind GeoLite2 databases (LFS) (${COMMIT_DATE})"
            git push
            echo "Changes pushed via LFS."
          fi
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}