#!/bin/bash

set -e
source /usr/share/mediawiki-shell/common
source /usr/share/mediawiki-shell/wiki-config

TITLE="$1"
filename_with_contents="$2"

[[ -v edit_message ]] || edit_message="mediawiki-shell-bot-default-edit-message"

if [ -z "$filename_with_contents" ]; then
  echo "$0: ERROR: Syntax: $0 <page_to_edit> <new_content_file>" >&2
  exit 1
fi

if [ ! -r "$filename_with_contents" ]; then
  echo "$0: ERROR: Local file '$filename_with_contents' does not exist!" >&2
  exit 2
fi

file_content="$(cat "$filename_with_contents")"

if [ "$file_content" = "" ]; then
  echo "$0: INFO: Local file '$filename_with_contents' was empty."
  exit 0
fi

echo "$0: INFO: Editing page '${WIKI_URL}' | '${WIKI_API}' | '$TITLE'..."
#echo "$0: INFO: Fetching edit token..."

mw-logout
mw-login

curl_run \
   $curl_opts \
   --cookie "$cookie_jar" \
   --cookie-jar "$cookie_jar" \
   --header "Accept-Language: en-GB" \
   --header "Connection: keep-alive" \
   --compressed \
   --output "${TMPFOLDER}/fetch-edit-token.json" \
   --request "GET" \
   "${WIKI_API}?action=query&meta=tokens&format=json"

csrf_token=$(jq --raw-output '.query.tokens.csrftoken' "${TMPFOLDER}/fetch-edit-token.json")

if [ "${#csrf_token}" = 42 ]; then
   true "$0: INFO: Edit token for page OK."
else
   echo "$0: ERROR: Edit token for page not set." >&2
   exit 1
fi

#echo "$0: INFO: Editing '$TITLE'..."

## XXX
## &tags=mediawiki-shell
## Need to create wiki tag mediawiki-shell here:
## https://www.whonix.org/wiki/Special:Tags

curl_run \
   $curl_opts \
   --cookie "$cookie_jar" \
   --cookie-jar "$cookie_jar" \
   --header "Accept-Language: en-GB" \
   --header "Connection: keep-alive" \
   --header "Expect:" \
   --data-urlencode "title=$TITLE" \
   --data-urlencode "text@$filename_with_contents" \
   --data-urlencode "token=$csrf_token" \
   --output "${TMPFOLDER}/edit-result.json" \
   --request "POST" \
   "${WIKI_API}?action=edit&format=json&tags=mediawiki-shell&summary=${edit_message}&bot"

true "$0: INFO: Network for edit page ok."

test -r "${TMPFOLDER}/edit-result.json"

edit_result_output="$(cat "${TMPFOLDER}/edit-result.json")"

edit_result_jq="$(echo "$edit_result_output" | jq -r ".edit.result")"

if [ "$edit_result_jq" = "Success" ]; then
   #echo "$edit_result_output" | jq
   exit 0
fi

echo "$edit_result_output" | jq >&2
echo "$0: ERROR: Edit page error." >&2

exit 1
