name: Scheduled Fake Commits

on:
    # Trigger the workflow on a schedule.
    schedule:
        # This expression means "run every 3 minutes". Useful for testing.
        # To revert to the original 8-hour schedule, change this to '0 */8 * * *'.
        - cron: "0 */12 * * *" # Original schedule: every 8 hours

    # To trigger manually for testing, you can add workflow_dispatch:
    # workflow_dispatch:

jobs:
    create_scheduled_commits:
        runs-on: ubuntu-latest

        steps:
            - name: Checkout repository
              uses: actions/checkout@v4
              with:
                  # Fetch the full history to ensure pushes work correctly
                  fetch-depth: 0
                  # Use a token with write access. This should be stored as a secret in your Gitea repo settings.
                  # The default GITEA_TOKEN might not have push permissions, so a Personal Access Token is recommended.
                  # Ensure you have a secret named GITEA_TOKEN with appropriate permissions (including write:actions or api)
                  token: ${{ secrets.GLOBAL_KEY }} # Replace GITEA_TOKEN with the name of your secret

            - name: Set up Git config
              # Configure Git user details globally for the runner
              run: |
                  echo "setting up git config"
                  git config --global user.name "Gitea Actions Bot"
                  git config --global user.email "actions-bot@your-gitea-instance.com" # Replace with a suitable email
                  echo "git config setup complete"

            - name: Create and Push Commits and Trigger Workflows
              id: push_commits_and_trigger # Updated ID
              env:
                  # Define your list of authors here. Each author should be on a new line,
                  # formatted as "Author Name <author@email.com>".
                  # For production, this should ideally be stored as a secret named FAKE_COMMIT_AUTHORS.
                  # For debugging, you can define it directly here as you have done.
                  AUTHOR_LIST: |
                      Author One <author1@example.com>
                      Author Two <author2@example.com>
                      Author Three <author3@example.com>
                      Author Four <author4@example.com>
                      Author Five <author5@example.com>
                      Author Six <author6@example.com>
                      Author Seven <author7@example.com>
                      Author Eight <author8@example.com>
                      Author Nine <author9@example.com>
                      Author Ten <author10@example.com>
                      DWSAuthor One <dwsauthor1@example.com>
                      DWSAuthor Two <dwsauthor2@example.com>
                      DWSAuthor Three <dwsauthor3@example.com>
                      DWSAuthor Four <autdwshor4@example.com>
                      DWSAuthor Five <autdwshor5@example.com>
                      DWSAuthor Six <autdwshor6@example.com>
                      DWSAuthor Seven <adwsuthor7@example.com>
                      DWSAuthor Eight <adwsuthor8@example.com>
                      DWSAuthor Nine <autdwshor9@example.com>
                      DWSAuthor Ten <autdwshor10@example.com>
                  COMMIT_COUNT: 3 # Number of commits to create
                  SLEEP_SECONDS: 150 # Delay between commits in seconds
                  TARGET_BRANCH: main # The branch to commit to and trigger workflows on
                  GITEA_BASE_URL: https://git.dws.rip # Replace with your Gitea instance URL
                  REPO_OWNER: dubey # Replace with your repository owner/organization
                  REPO_NAME: WebGoat # Replace with your repository name
                  # Define a space-separated list of workflow names to trigger
                  WORKFLOW_NAMES: "DDSAST DDSDS DDSCA" # Replace with the actual names of your workflows

              run: |
                  echo "starting Create and Push Commits and Trigger Workflows step"
                  echo "AUTHOR_LIST content:"
                  # Mask sensitive content if AUTHOR_LIST were a secret, but here it's in the workflow file for debugging
                  # echo "$AUTHOR_LIST" | sed 's/@[^>]*>/@***/g' # Example masking

                  echo "reading author's list into array"
                  # Read authors into a Bash array using readarray
                  readarray -t authors <<< "$AUTHOR_LIST"
                  echo "finished reading author's list into array"

                  # Check if authors list is empty
                  if [ ${#authors[@]} -eq 0 ]; then
                    echo "Error: AUTHOR_LIST is empty or could not be parsed into an array."
                    exit 1
                  fi

                  # Shuffle the authors array to randomize the order
                  authors=($(printf "%s\n" "${authors[@]}" | shuf))

                  # Read workflow names into a Bash array
                  IFS=' ' read -r -a workflow_array <<< "$WORKFLOW_NAMES"
                  echo "Workflows to trigger: ${workflow_array[@]}"

                  echo "Starting commit creation process..."
                  echo "Authors available: ${#authors[@]}"
                  echo "Commits to create: $COMMIT_COUNT"
                  echo "Delay between commits: $SLEEP_SECONDS seconds"
                  echo "Target branch: $TARGET_BRANCH"

                  # Loop to create the specified number of commits
                  for i in $(seq 1 $COMMIT_COUNT); do
                    # Calculate the index for the current author, cycling through the list
                    author_index=$(( (i - 1) % ${#authors[@]} ))
                    current_author="${authors[$author_index]}"

                    echo "Processing author: $current_author" # Debug echo

                    # Extract name and email from the author string
                    # Assumes format "Name <email>"
                    author_name=$(echo "$current_author" | sed -E 's/^(.*) <.*>$/\1/')
                    author_email=$(echo "$current_author" | sed -E 's/^.* <(.*)>$/\1/')

                    echo "Extracted name: $author_name, email: $author_email" # Debug echo

                    echo "--- Creating commit $i of $COMMIT_COUNT by $author_name ---"

                    # Configure git user for this specific commit
                    git config user.name "$author_name"
                    git config user.email "$author_email"

                    # Create a dummy change: append current timestamp and author to a file
                    # This ensures there's always something to commit
                    echo "$(date): Commit $i by $author_name" >> fake_commit_log.txt

                    # Stage the changes
                    git add fake_commit_log.txt

                    # Commit the changes
                    git commit -m "Automated commit $i by $author_name"

                    # Push the commit to the target branch
                    # Use --set-upstream origin $TARGET_BRANCH on the first push if needed
                    echo "Pushing commit..."
                    git push origin HEAD:$TARGET_BRANCH

                    echo "Commit $i pushed successfully."

                    # --- Trigger the other workflows after each successful push ---
                    echo "Triggering specified workflows on branch '$TARGET_BRANCH' for commit $i..."

                    # Loop through the list of workflow names and trigger each one
                    for workflow_name in "${workflow_array[@]}"; do
                      echo "Attempting to trigger workflow: $workflow_name"
                      # Construct the API URL
                      API_URL="${GITEA_BASE_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/actions/workflows/${workflow_name}/dispatches"

                      # Use curl to send the API request
                      # Requires a GITEA_TOKEN with write:actions or api scope
                      curl -X POST \
                        -H "Authorization: Bearer ${{ secrets.GLOBAL_KEY }}" \
                        -H "Content-Type: application/json" \
                        -d '{"ref": "'"$TARGET_BRANCH"'"}' \
                        "$API_URL"

                      echo "Workflow trigger request sent for workflow '$workflow_name' for commit $i."
                    done
                    echo "Finished triggering workflows for commit $i."
                    # --- End Trigger ---


                    # Wait for the specified delay before the next commit, unless it's the last one
                    if [ $i -lt $COMMIT_COUNT ]; then
                      echo "Waiting for $SLEEP_SECONDS seconds before the next commit..."
                      sleep $SLEEP_SECONDS
                    fi
                  done

                  echo "Finished creating $COMMIT_COUNT commits and triggering workflows."
