#!/bin/bash

configdone=""
reason="κάτι έξυπνο εδώ"
cookiesfile="move-wikt-login-cookies.txt"
wiki="el.wiktionary.org"
#όνομα χρήστη, κωδικός πρόσβασης στο wiki
lgname="xxxxxx"
lgpassword="xxxxxx"

curlargs="-s -S --retry 10 -H 'Expect:' -c $cookiesfile -b $cookiesfile -f"
curlurl="http://$wiki/w/api.php?action="
if [ ! -z "$reason" ]; then
#  reason=`echo "$reason" | sed -e 's/ /+/g;'`
  reason_urlencode="--data-urlencode"
  reason_arg="reason=$reason"
else
  reason_urlencode=""
  reason_arg=""
fi

function loginerrcheck() {
    if [ $loginresult -ne "0" ]; then 
	echo "Η σύνδεση απέτυχε, μάλλον λάθος κώδικας πρόασβασης"
	if [ -e "$cookiesfile" ]; then
	    rm -f $cookiesfile
	fi
	exit 1
    fi
    loginerr=`echo $login | grep Illegal`
    if [ ! -z "$loginerr" ]; then
	echo "Η σύνδεση απέτυχε, μάλλον λάθος κώδικας πρόασβασης"
	echo "   Περισσότερες πληροφορίες:"
	echo "   $loginerr" | sed -e "s/'/'/g;"
	if [ -e "$cookiesfile" ]; then
	    rm -f $cookiesfile
	fi
	exit 1
    fi
    return 
}

function login() {
    if [ -z "$lgname" -o -z "$lgpassword" ]; then
	echo "Πρέπει να επεξεργαστείτε το αρχείο αυτό και να ελέγξετε τις ρυθμίσεις"
	echo "lgname και lgpassword."
	exit 1
    fi
    login=`curl -s -S  --retry 10 -H 'Expect:' -c $cookiesfile -f --data-urlencode "lgname=$lgname" --data-urlencode "lgpassword=$lgpassword" --data-urlencode "format=xml"  "${curlurl}login"`
    loginresult=$?
    loginerrcheck
    loginneedtoken=`echo $login | grep NeedToken`
    if [ ! -z "$loginneedtoken" ]; then
	tokenname=token
	xmltext="$login"
	getxmlitem
	lgtoken="$xmlitemval"
	login=`curl -s -S  --retry 10 -H 'Expect:' -c $cookiesfile -b $cookiesfile -f --data-urlencode "lgname=$lgname" --data-urlencode "lgpassword=$lgpassword" --data-urlencode "lgtoken=$lgtoken" --data-urlencode "format=xml"  "${curlurl}login"`
	loginresult=$?
        loginerrcheck
	loginneedtoken=`echo $login | grep NeedToken`
	if [ ! -z "$loginneedtoken" ]; then
	    echo "Η σύνδεση απέτυχε (NeedToken μετά από δεύτερη προσπάθεια)"
	    if [ -e "$cookiesfile" ]; then
		rm -f $cookiesfile
	    fi
	    exit 1
	fi
    fi
    echo "Συνδεθήκατε ως $lgname"
}

function getxmlitem() 
{
  xmlitemval=`echo $xmltext | tr '>' '\n' | grep ${tokenname}= | awk -F${tokenname}= '{ print $2 }' | awk -F'"' '{ print $2 }'` 
}

function doamove() {
	  newtitle=`echo $oldtitle | sed -e "s/Πρότυπο:/Πρότυπο:παρωχημένα\//"`
	  
          # προετοιμασία
	  title="$oldtitle"
	  xmltext=`curl $curlargs --data-urlencode "prop=info" --data-urlencode "intoken=move" --data-urlencode "format=xml" --data-urlencode "titles=$oldtitle" "${curlurl}query"`
	  tokenname=movetoken
	  getxmlitem
	  movetoken="$xmlitemval"
	  if [ -z "$movetoken" ]; then 
	      echo "Η αίτηση για movetoken απέτυχε"
	      echo "   Περισσότερες πληροφορίες:"
	      echo "   $xmltext" | sed -e "s/'/'/g;"
	      exit 1
	      continue
	  fi

          # κάνουμε την μετακίνηση
	  echo "μετακίνηση $oldtitle σε $newtitle"
	  result=`curl $curlargs --data-urlencode "format=xml" --data-urlencode "token=$movetoken" --data-urlencode "from=$oldtitle" --data-urlencode "to=$newtitle" "$reason_urlencode" "$reason_arg" --data-urlencode "noredirect=1" "${curlurl}move" `
	  if [ "$?" -ne "0" ]; then 
	      echo "Η μετακίνηση απέτυχε"
	      return 1
	  fi
	  err=`echo $result | grep -i error`
	  if [ ! -z "$err" ]; then
	      echo "Η μετακίνηση απέτυχε"
	      echo "   Περισσότερες πληροφορίες:"
	      echo $result
#	      echo "   $err" | sed -e "s/'/'/g;" | awk -F 'error' '{ print $2 }' | awk -F '/>' '{ print $1 }'
	      continue
	  fi	
}

function checkconfig() {
    if [ -z "$configdone" ]; then
	echo "Πρέπει να επεξεργαστείτε το αρχείο αυτό για να ελέγξετε τις ρυθμίσεις"
	echo "expiry, reason, κλπ, και μετά να βγάλετε το # από τη γραμμή με το configdone."
	exit 1
    fi
}

function checksessioncurrent() {
    if [ -e "$cookiesfile" ]; then
	secs=`cat $cookiesfile | grep 'Token' | awk '{ print $5 }'`
	secs=$(( $secs+60 ))
	secsnow=`date +%s`
	if  [ "$secs" -le "$secsnow" ]; then 
	    #για να αναγκαστούμε να συνδεθούμε ξανά
	    rm -f "$cookiesfile"
	fi
    fi
}

function checkusage() {
    if [ "$1" -eq "0" ]; then
	echo "Χρήση: $0 τίτλος1 τίτλος2 ..."
	echo "Ο λογαριασμός σας πρέπει να έχει τα σχετικά δικαιώματα."
	echo "Προσοχή: κάθε τίτλος πρέπει να περικλείεται σε αποστρόφους αν περιέχει κενό."
	echo "Για παράδειγμα:"
	echo "$0 'Πρότυπο:μέρος του λόγου'   'Πρότυπο:μπλαμπλαl'"
	echo "Εναλλακτικά, μπορείτε να καλέσετε το πρόγραμμα με"
	echo "cat αρχείο-με-ονόματα-σελίδων | $0 -" 
	echo "και θα διαβάσει τον κατάλογο ονομάτων από το stdin."
	exit 1
    fi
}

##########################
##########################
##
## MAIN
##
checkconfig
checkusage $#
checksessioncurrent
if [ ! -e "$cookiesfile" ]; then
    login
fi

if [ "$1" == "-" ]; then
    while read oldtitle; do
	doamove
        sleep 5
    done
else 
    for oldtitle in "$@"; do
	doamove
        sleep 5
    done
fi