class Poll::BallotSheet < ApplicationRecord
  belongs_to :poll
  belongs_to :officer_assignment
  has_many :ballots

  validates :data, presence: true
  validates :poll_id, presence: true
  validates :officer_assignment_id, presence: true

  after_create :verify_ballots

  def author
    officer_assignment.officer.name
  end

  def verify_ballots
    parsed_ballots.each_with_index do |investment_ids, index|
      ballot = create_ballots(investment_ids, index)
      ballot.verify
    end
  end

  def parsed_ballots
    data.split(/[;\n]/)
  end

  private

    def create_ballots(investment_ids, index)
      poll_ballot = Poll::Ballot.where(ballot_sheet: self,
                                       data: investment_ids,
                                       external_id: index).first_or_create!
      create_ballot(poll_ballot)
      poll_ballot
    end

    def create_ballot(poll_ballot)
      Budget::Ballot.where(physical: true,
                           user: nil,
                           poll_ballot: poll_ballot,
                           budget: poll.budget).first_or_create!
    end
end
