#!/usr/bin/env ruby
#
# Convert "new format" raw_board_votes.json into "old format"
# board_nominations.ini and raw_board_votes.txt for use by the whatif tool.
#

require 'json'

raw_file = Dir["/srv/svn/Meetings/*/raw_board_votes.json"].sort.last
raw_votes = JSON.parse(IO.read(raw_file))
txt_file = raw_file.sub('.json', '.txt')
ini_file = File.dirname(raw_file) + '/board_nominations.ini'

votes = ''
raw_votes['votes'].sort_by {|key, data| data['timestamp']}.each do |key, data|
  time = Time.at(data['timestamp']).gmtime.strftime("%Y/%m/%d %H:%M:%S")
  vote = data['vote'].split(' ').map {|vote| vote[-1]}.join.downcase
  votes += "[#{time}] #{key[0..31]} #{vote}\n"
end

if !File.exist?(txt_file) or votes != IO.read(txt_file)
  IO.write(txt_file, votes)
end

letter = 'a'
ini =  "[nominees]\n"
raw_votes['issue']['candidates'].each do |candidate|
  ini += "#{letter}: #{candidate['name']}\n"
  letter.succ!
end

if !File.exist?(ini_file) or ini != IO.read(ini_file)
  IO.write(ini_file, ini)
end

puts votes
puts
puts ini
