defmodule CobblemonUiWeb.BattleComponents do use CobblemonUiWeb, :html import CobblemonUiWeb.PokemonComponents, only: [tier_badge: 1] attr :battle, :map, required: true attr :player_id, :string, required: true attr :tier_list, :map, default: %{} def battle_panel(assigns) do ~H"""
<%!-- Actors --%>
<%= for {actor, idx} <- Enum.with_index(@battle.actors) do %>
<%!-- Actor header --%>
<%= if actor.type == "player" do %> <.icon name="hero-user" class="size-4 text-primary" /> <% else %> <.icon name="hero-cpu-chip" class="size-4 text-warning" /> <% end %>

{actor.name}

{actor.type}

<%!-- Pokemon cards --%>
<%= for poke <- actor.active_pokemon do %> <% tier = Map.get(@tier_list, String.downcase(poke.species || ""), nil) %> <% hp_pct = if poke.max_hp > 0, do: Float.round(poke.hp / poke.max_hp * 100, 1), else: 0.0 %>
<%!-- Sprite with tier badge pinned to corner --%>
{poke.species}
<.tier_badge :if={tier} tier={tier} species={poke.species} compact={true} />
<%!-- Info --%>
<%!-- Name row --%>
{poke.species} Lv.{poke.level}
<%!-- HP bar --%>
"bg-base-content/20" hp_pct > 50 -> "bg-success" hp_pct > 20 -> "bg-warning" true -> "bg-error" end ]} style={"width: #{hp_pct}%"} />
<%!-- HP numbers --%>
HP {poke.hp}/{poke.max_hp} ({hp_pct}%)
<% end %>
<% end %>
""" end end