#!/usr/bin/env python
# -*- coding: utf-8 -*-
#

import re,time
import pywikibot as pwb
from pywikibot import pagegenerators as pg
from pywikibot import bot

def main(ns,mod):
	start_time = time.time()
	gen = pg.AllpagesPageGenerator(namespace=ns, includeredirects=False)
	re_arx = re.compile(ur"^(\{\{([Dd]iscussi[oó])?[Aa]rxivada\}\}|==|<!--)")
	t=0
	n=0
	for pag in gen:
		t += 1
	for pag in gen:
		n += 1
		if n%6==0:
			exec_time = (time.time()-start_time)
			sec = int((exec_time/n)*(t-n))
			m, s = divmod(sec, 60)
			print "[%02d:%02d]" % (m, s)
		p = round(float(n*100)/float(t),2)
		match = pag.text.strip(" \t\n\r").replace(" ","")[:22]
		if re.search(re_arx,match):
			print pag.title(),"("+str(n)+"/"+str(t)+")","("+str(p)+"%)"
			continue
		else:
			print pag.title(),"("+str(n)+"/"+str(t)+")","("+str(p)+"%)"
			if mod == u"":
				print pag.text[:150]
				enc = bot.input(u"\nEncapçalament?")
				if enc == u"":
					print u"Torneu a deixar en blanc l'ecapçalament per saltar la pàgina"
					enc = bot.input(u"\nEncapçalament?")
					if enc == u"":
						continue
				pag.text = u"== "+enc+u" ==\n"
				pag.save(u"Afegint encapçalament per la migració a Flow")
			else:
				pag.text += u"\n"+mod
				pag.save(u"Classificant per migrar a Flow")
	return 0

if __name__ == "__main__":
	site = pwb.Site()
	bot.output(u"Benvinguts a l'script que detecta pàgines de discussió que no comencen amb un encapçalament. Pot funcionar en dos modes: L'interactiu, on s'especifica al moment l'ecapçalament que es vol afegir o el de categorització, on automàticament totes les pàgines sense encapçalament inicial es categoritzen.")
	taula_ns = u"""
1 Discussió
3 Usuari Discussió
5 Viquipèdia Discussió
7 Fitxer Discussió
9 MediaWiki Discussió 
11 Plantilla Discussió
13 Ajuda Discussió
15 Categoria Discussió 
101 Portal Discussió
103 Viquiprojecte Discussió
829 Mòdul Discussió"""
	resp=False
	while resp==False:
		ns = bot.input(taula_ns+u"\n\nEn quin espai de noms voleu treballar? (Número)")
		if ns in (u"1",u"3",u"5",u"7",u"9",u"11",u"13",u"15",u"101",u"103",u"829"):
			resp=True
			resp2=False
			while resp2==False:
				mod = bot.input(u"\n\nMode d'execució: Categorització (C) // Encaçalaments (E)<--(per defecte ENTER)").lower()
				if mod in (u"c",u"e",u""):
					if mod == u"e":
						mod = u""
					resp2=True
				else:
					print u"\033[91m\nSi us plau introduïu un mode vàlid\033[0m"
			if mod == u"c":
				mod = bot.input(u"\n\nQuè voleu afegir al final dels articles que no tinguin encapçalament? ([[Categoria:Discussions sense encapçalament inicial]] per defecte ENTER)")
				if mod == u"":
					mod = u"[[Categoria:Discussions sense encapçalament inicial]]"
		else:
			print u"\033[91m\nSi us plau introduïu un espai de noms de discussió\033[0m"
	main(int(ns),mod)