#!/bin/bash

# Check if the server name is provided
if [[ -z "$1" ]]; then
  echo "Error: SSH server name is required."
  echo "Usage: $0 <server_name>"
  exit 1
fi

# Set server name from command-line argument
server_name="$1"

# Source directory path
source_directory=".nuxt/nuxt-custom-elements/dist/unraid-components/"

if [ ! -d "$source_directory" ]; then
  echo "The web components directory does not exist."
  exit 1
fi

# Replace the value inside the rsync command with the user's input
# Delete existing web components in the target directory
ssh "root@${server_name}" "rm -rf /usr/local/emhttp/plugins/dynamix.my.servers/unraid-components/nuxt/*"

rsync_command="rsync -avz -e ssh $source_directory root@${server_name}:/usr/local/emhttp/plugins/dynamix.my.servers/unraid-components/nuxt"

echo "Executing the following command:"
echo "$rsync_command"

# Execute the rsync command and capture the exit code
eval "$rsync_command"
exit_code=$?

# Update the auth-request.php file to include the new web component JS
update_auth_request() {
  local server_name="$1"
  # SSH into server and update auth-request.php
  ssh "root@${server_name}" "
    AUTH_REQUEST_FILE='/usr/local/emhttp/auth-request.php'
    WEB_COMPS_DIR='/usr/local/emhttp/plugins/dynamix.my.servers/unraid-components/nuxt/_nuxt/'

    # Find JS files and modify paths
    mapfile -t JS_FILES < <(find \"\$WEB_COMPS_DIR\" -type f -name \"*.js\" | sed 's|/usr/local/emhttp||' | sort -u)

    FILES_TO_ADD+=(\"\${JS_FILES[@]}\")

    if grep -q '\$arrWhitelist' \"\$AUTH_REQUEST_FILE\"; then
      awk '
        BEGIN { in_array = 0 }
        /\\\$arrWhitelist\s*=\s*\[/ {
          in_array = 1
          print \$0
          next
        }
        in_array && /^\s*\]/ {
          in_array = 0
          print \$0
          next
        }
        !in_array || !/\/plugins\/dynamix\.my\.servers\/unraid-components\/nuxt\/_nuxt\/unraid-components\.client-/ {
          print \$0
        }
      ' \"\$AUTH_REQUEST_FILE\" > \"\${AUTH_REQUEST_FILE}.tmp\"

      # Now add new entries right after the opening bracket
      awk -v files_to_add=\"\$(printf '%s\n' \"\${FILES_TO_ADD[@]}\" | sort -u | awk '{printf \"  \\\x27%s\\\x27,\n\", \$0}')\" '
        /\\\$arrWhitelist\s*=\s*\[/ {
          print \$0
          print files_to_add
          next
        }
        { print }
      ' \"\${AUTH_REQUEST_FILE}.tmp\" > \"\${AUTH_REQUEST_FILE}\"

      rm \"\${AUTH_REQUEST_FILE}.tmp\"
      echo \"Updated \$AUTH_REQUEST_FILE with new web component JS files\"
    else
      echo \"\\\$arrWhitelist array not found in \$AUTH_REQUEST_FILE\"
    fi
  "
}

update_auth_request "$server_name"

# Play built-in sound based on the operating system
if [[ "$OSTYPE" == "darwin"* ]]; then
  # macOS
  afplay /System/Library/Sounds/Glass.aiff
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
  # Linux
  paplay /usr/share/sounds/freedesktop/stereo/complete.oga
elif [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
  # Windows
  powershell.exe -c "(New-Object Media.SoundPlayer 'C:\Windows\Media\Windows Default.wav').PlaySync()"
fi

# Exit with the rsync command's exit code
exit $exit_code