# coding: utf-8
require 'pp'
require 'sunflower'
require 'rest-client'
require 'io/console'

def dbname_to_url dbname
	@data ||= begin
		data = File.readlines('operations/mediawiki-config/wmf-config/InitialiseSettings.php')
			.drop_while{|ln| ln.strip != "'wgServer' => array(" }.drop(1)
			.take_while{|ln| ln[0] == "\t" || ln.strip == '' }
			.select{|ln| ln.include? '=>' }
			.map{|ln| ln.sub('//', '').sub(%r~(//|#).+~, '') } # strip comments and leading // in URLs

		# meh
		eval "{ #{data.join "\n"} }"
	end

	if @data[dbname]
		@data[dbname]
	else
		family_dbname = @data.keys.find{|k| dbname.end_with? k } || 'default'
		family_dbname_suffix = family_dbname == 'default' ? 'wiki' : family_dbname
		@data[family_dbname].sub '$lang', dbname.sub(/#{family_dbname_suffix}$/, '').sub('_', '-')
	end
end

username = 'Matma Rex'
def get_password
	return @password if @password
	print 'Password: '
	@password = STDIN.noecho{ gets.strip }
	print "\n"
	return @password
end

gadget_name_map = {
	arwiki: 'mySandbox.js',
	bhwiki: 'mySandbox.js',
	bnwiki: 'mySandbox.js',
	bnwikibooks: 'mySandbox.js',
	bnwiktionary: 'mySandbox.js',
	brwikimedia: 'mySandbox.js',
	bswiki: 'mojeIgralište.js',
	cawiki: 'mySandbox.js',
	cawikibooks: 'mySandbox.js',
	ckbwiki: 'mySandbox.js',
	dawiki: 'mySandbox.js',
	dsbwiki: 'mySandbox.js',
	elwiki: 'mySandbox.js',
	elwikivoyage: 'mySandbox.js',
	enwiki: 'mySandbox.js',
	enwikibooks: 'mySandbox.js',
	enwikiversity: 'mySandbox.js',
	eowiki: 'PropraProvejo.js',
	eowikibooks: 'PropraProvejo.js',
	eowikiquote: 'PropraProvejo.js',
	eswiki: 'mySandbox.js',
	fawiki: 'mySandbox.js',
	fawikiquote: 'mySandbox.js',
	fawikivoyage: 'mySandbox.js',
	fawiktionary: 'mySandbox.js',
	hewiki: 'mySandbox.js',
	hewikibooks: 'mySandbox.js',
	hewikinews: 'mySandbox.js',
	hewikivoyage: 'mySandbox.js',
	hifwiki: 'mySandbox.js',
	hiwiki: 'mySandbox.js',
	hsbwiki: 'mySandbox.js',
	huwiki: 'mySandbox.js',
	hywiki: 'mySandbox.js',
	ilowiki: 'mySandbox.js',
	iswiki: 'mySandbox.js',
	itwikisource: 'barbaforcutanew.js',
	jawiki: 'mySandbox.js',
	kkwiki: 'mySandbox.js',
	knwiki: 'mySandbox.js',
	kowiki: 'mySandbox.js',
	lvwiki: 'mySandbox.js',
	maiwiki: 'mySandbox.js',
	minwiki: 'mySandbox.js',
	mlwiki: 'mySandbox.js',
	mswiki: 'mySandbox.js',
	newiki: 'mySandbox.js',
	nlwiki: 'mijnKladblok.js',
	pawiki: 'mySandbox.js',
	plwiki: 'my-sandbox.js',
	plwikisource: 'my-sandbox.js',
	plwikivoyage: 'my-sandbox.js',
	plwiktionary: 'my-sandbox.js',
	pswiki: 'mySandbox.js',
	ptwiki: 'mySandbox.js',
	sawiki: 'mySandbox.js',
	simplewiktionary: 'mySandbox.js',
	skwiki: 'mySandbox.js',
	slwiki: 'mySandbox.js',
	sowiki: 'mySandbox.js',
	svwiki: 'mySandbox.js',
	tawiki: 'mySandbox.js',
	tawiktionary: 'mySandbox.js',
	test2wiki: 'mySandbox.js',
	tewiki: 'mySandbox.js',
	tewikiquote: 'mySandbox.js',
	thwiki: 'mySandbox.js',
	thwikibooks: 'mySandbox.js',
	thwikiquote: 'mySandbox.js',
	thwikisource: 'mySandbox.js',
	thwiktionary: 'mySandbox.js',
	tlwiki: 'mySandbox.js',
	ukwiki: 'mySandbox.js',
	urwiki: 'mySandbox.js',
	viwiki: 'mySandbox.js',
	wikidatawiki: 'mySandbox.js',
	zhwiki: 'mySandbox.js',
}

# EDIT HERE WHEN WE HAVE THE LIST
list = %w[enwiki]

list.each do |dbname|
	pagetitle = 'MediaWiki:Gadgets-definition'

	puts ""
	puts ">> #{dbname} (#{dbname_to_url dbname}) #{pagetitle}"

	s = Sunflower.new dbname_to_url dbname
	s.summary = "disabling the sandbox gadget after deploying SandboxLink extension, see [[phabricator:T72499]]; help and configuration: [[mw:Help:Extension:SandboxLink]]"
	s.login username, get_password()
	page = s.page pagetitle

	gadget_name = gadget_name_map[ dbname.to_sym ]
	page.text = page.text.each_line.reject{|ln| ln.include? gadget_name }.join("")

	p page.save
	# p page.dump
	sleep 3
end
