# yamllint disable rule:line-length
---
name: Generate weekly stats
on:
  schedule:
    - cron: "0 12 * * 5"
  workflow_dispatch:

jobs:
  stats_updater:
    if: github.repository_owner == 'alexbelgium'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v4
      - name: Create stats
        run: |
          echo "Starting"
          COUNT=0
          COUNT1=0
          COUNT2=0
          COUNT3=0
          # Make sure file exists
          file=Stats
          touch "$file"
          rm "$file"2
          if ! grep -q "Date" "$file"; then
            sed -i "1i Date" "$file"
          fi
          # Add new column
          sed -i 's/^/- /' "$file"
          # Add date
          sed -i "/Date/s|^-|$(date '+%Y-%m-%d')|" "$file"

          # Go through all folders, add to filters if not existing
          # shellcheck disable=SC2086
          for f in $( find -- * -maxdepth 0 -type d | sort -r ); do
            DOWNLOADS=0
            if [ -f "$f"/config.json ] && jq -e '.image' "$f/config.json"; then
              SLUG="$(jq -r '.image' "$f/config.json" | awk -F 'alexbelgium/|-{arch' '{print $2}')"
              if [[ "$(jq '.arch[]' "$f/config.json")" == *"armv7"* ]]; then
                ARCH=armv7 && COUNT="$(curl  --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')"
                until [ -n "$COUNT" ]; do COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" && sleep 5; ((c++)) && echo "repeat $c" && if [[ "$c" == 10 ]]; then COUNT=0; fi; done
                COUNT="${COUNT//,/}"
                COUNT1="$COUNT"
                echo "$COUNT $ARCH users with $SLUG" && DOWNLOADS="$(( DOWNLOADS + COUNT))"
              else COUNT1="-"; fi
              if [[ "$(jq '.arch[]' "$f/config.json")" == *"amd64"* ]]; then
                ARCH=amd64 && COUNT="$(curl  --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')"
                until [ -n "$COUNT" ]; do COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" && sleep 5; ((c++)) && echo "repeat $c" && if [[ "$c" == 10 ]]; then COUNT=0; fi; done
                COUNT="${COUNT//,/}"
                COUNT2="$COUNT"
                echo "$COUNT $ARCH users with $SLUG" && DOWNLOADS="$(( DOWNLOADS + COUNT))"
              else COUNT2="-"; fi
              if [[ "$(jq '.arch[]' "$f/config.json")" == *"aarch64"* ]]; then
                ARCH=aarch64 && COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')"
                until [ -n "$COUNT" ]; do COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" && sleep 5; ((c++)) && echo "repeat $c" && if [[ "$c" == 10 ]]; then COUNT=0; fi; done
                COUNT="${COUNT//,/}"
                COUNT3="$COUNT"
                echo "$COUNT $ARCH users with $SLUG" && DOWNLOADS="$(( DOWNLOADS + COUNT))"
              else COUNT3="-";fi
              echo "$SLUG $DOWNLOADS $COUNT1 $COUNT2 $COUNT3" >> "$file"2
              # Create line if not existing
              if ! grep -q "${SLUG}$" "$file"; then
                sed -i "\$a$SLUG" "$file"
                # shellcheck disable=SC2046
                for i in $(seq $(head -n 1 $file | tr -cd ' \t' | wc -c )); do
                  echo "$i"
                  sed -i "/$SLUG/s|^|- |" "$file"
                done
              fi
              # Add data
              sed -i "/${SLUG}$/s|^-|$DOWNLOADS|" "$file"
            fi
          done

          # Add total
          SLUG=TOTAL
          if ! grep -q "$SLUG$" "$file"; then
            sed -i "1a$SLUG" "$file"
            # shellcheck disable=SC2046
            for i in $(seq $(head -n 1 $file | tr -cd ' \t' | wc -c )); do
              echo "$i"
              sed -i "/$SLUG$/s|^|- |" "$file"
            done
          fi
          DOWNLOADS="$(awk 'FNR > 2 {SUM+=$1}END{print SUM}' Stats)"
          sed -i "/$SLUG$/s|^-|$DOWNLOADS|" "$file"

          # Sort file
          (head -n 2 "$file" && tail -n +3 "$file" | sort -k1 -r -n) > tmp && mv tmp "$file"

          sed -i "1i Name Total armv7 amd64 aarch64" "$file"2
          sed -i "1a ------------------------------" "$file"2
          #TOTAL="$(awk '{SUM+=$2}END{print SUM}' Stats)"
          #TOTAL1="$(awk '{SUM+=$2}END{print SUM}' Stats)"
          #TOTAL2="$(awk '{SUM+=$2}END{print SUM}' Stats)"
          #TOTAL3="$(awk '{SUM+=$2}END{print SUM}' Stats)"

      - name: Commit if needed
        uses: EndBug/add-and-commit@v9
        with:
          default_author: github_actions
          message : "Github bot : stats updated"
  Generate_graphs:
   needs: stats_updater
   uses: ./.github/workflows/helper_stats_graphs.yaml
