defmodule PhilomenaWeb.Topic.PollView do
  use PhilomenaWeb, :view

  def ranked_options(poll) do
    poll.options
    |> Enum.sort_by(&{-&1.vote_count, &1.id})
  end

  def winning_option(poll) do
    poll
    |> ranked_options()
    |> Enum.at(0)
  end

  def active?(poll) do
    not poll.hidden_from_users and DateTime.diff(poll.active_until, DateTime.utc_now()) > 0
  end

  def require_answer?(%{vote_method: vote_method}), do: vote_method == "single"

  def input_type(%{vote_method: "single"}), do: "radio"
  def input_type(_poll), do: "checkbox"

  def input_name(_poll), do: "poll[option_ids][]"

  def percent_of_total(_option, %{total_votes: 0}), do: "0%"

  def percent_of_total(%{vote_count: vote_count}, %{total_votes: total_votes}) do
    :io_lib.format("~.2f%", [vote_count / total_votes * 100])
  end

  def option_class(%{id: option_id}, %{id: option_id}, true), do: "poll-option-top"
  def option_class(_option, _top_option, _winners?), do: nil

  def poll_bar_class(%{id: option_id}, %{id: option_id}, true),
    do: "poll-bar__fill poll-bar__fill--top"

  def poll_bar_class(_option, _top_option, _winners?), do: "poll-bar__fill"
end