class Budgets::Investments::BallotComponent < ApplicationComponent
  attr_reader :investment, :investment_ids, :ballot
  use_helpers :current_user, :heading_link, :link_to_verify_account

  def initialize(investment:, investment_ids:, ballot:)
    @investment = investment
    @investment_ids = investment_ids
    @ballot = ballot
  end

  private

    def budget
      ballot.budget
    end

    def voted?
      ballot.has_investment?(investment)
    end

    def reason
      @reason ||= investment.reason_for_not_being_ballotable_by(current_user, ballot)
    end

    def vote_aria_label
      t("budgets.investments.investment.add_label", investment: investment.title)
    end

    def remove_vote_aria_label
      t("budgets.ballots.show.remove_label", investment: investment.title)
    end

    def link_to_my_heading
      link_to(investment.heading.name,
              budget_investments_path(budget_id: investment.budget_id,
                                      heading_id: investment.heading_id))
    end

    def link_to_change_ballot
      link_to(t("budgets.ballots.reasons_for_not_balloting.change_ballot"),
              budget_ballot_path(budget))
    end

    def assigned_heading
      ballot.heading_for_group(investment.group)
    end

    def cannot_vote_text
      if reason.present? && !voted?
        t("budgets.ballots.reasons_for_not_balloting.#{reason}",
          verify_account: link_to_verify_account,
          my_heading: link_to_my_heading,
          change_ballot: link_to_change_ballot,
          heading_link: heading_link(assigned_heading, budget))
      end
    end
end
