require_relative "../models"

def show_candidate(id)
  c = Candidate.get(id)
  
  template = "%6s\t%50s\t%20s\t%3s"
  
  puts template % [ c.id, c.forenames, c.surname ]
  
  ccy_template = "%20s\t%15s\t%20s\t%20s"
  c.candidacies.each do |ccy|
    puts template % [ ccy.election.body.name, ccy.election.d, ccy.district.name, ccy.party.name]
  end
end

winner = ARGV.shift
loser = ARGV.shift

puts "WINNER"
show_candidate(winner)

puts

puts "LOSER"
show_candidate(loser)

puts "Are you sure you want to merge these two candidates? The loser will be deleted. (Y or N)"

answer = gets.chomp.downcase

unless answer == 'y'
  puts "Aborting. No changes made to the database."
  exit
end

# Transfer all the loser's candidacies to the winner
repository(:default).adapter.select("
  UPDATE candidacies
  SET candidate_id = #{winner}
  WHERE candidate_id = #{loser}
")

# Delete the loser candidate
Candidate.get(loser).destroy

puts "Merge completed. Here is the merged candidate:"
puts
show_candidate(winner)


require_relative "../models"

def show_candidate(id)
  c = Candidate.get(id)
  
  template = "%6s\t%50s\t%20s\t%3s"
  
  puts template % [ c.id, c.forenames, c.surname ]
  
  ccy_template = "%20s\t%15s\t%20s\t%20s"
  c.candidacies.each do |ccy|
    puts template % [ ccy.election.body.name, ccy.election.d, ccy.district.name, ccy.party.name]
  end
end

winner = ARGV.shift
loser = ARGV.shift

puts "WINNER"
show_candidate(winner)

puts

puts "LOSER"
show_candidate(loser)

puts "Are you sure you want to merge these two candidates? The loser will be deleted. (Y or N)"

answer = gets.chomp.downcase

unless answer == 'y'
  puts "Aborting. No changes made to the database."
  exit
end

# Transfer all the loser's candidacies to the winner
repository(:default).adapter.select("
  UPDATE candidacies
  SET candidate_id = #{winner}
  WHERE candidate_id = #{loser}
")

# Delete the loser candidate
DeletedCandidate.create(:old_candidate_id => loser, :candidate_id => winner)
Candidate.get(loser).destroy

puts "Merge completed. Here is the merged candidate:"
puts
show_candidate(winner)


Create a DeletedCandidate for the merged candidate
Create a DeletedCandidate for the merged candidate
