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: %{} attr :evolutions, :map, default: %{} def battle_panel(assigns) do ~H"""
Active Battle
<%= for actor <- @battle.actors do %>
<%= if actor.type == "player" do %> <.icon name="hero-user" class="size-3.5 text-primary" /> <% else %> <.icon name="hero-cpu-chip" class="size-3.5 text-warning" /> <% end %>

{actor.name}

{actor.type}

<%= for poke <- actor.active_pokemon do %> <% tier = Map.get(@tier_list, String.downcase(poke.species || ""), nil) %> <% species_key = String.downcase(poke.species || "") %> <% is_opponent = actor.player_id != @player_id %> <% evos = if is_opponent, do: Map.get(@evolutions, species_key, []), else: [] %>
<%!-- Sprite --%>
{poke.species}
<%!-- Info --%>
{poke.species} Lv.{poke.level} <.tier_badge :if={tier} tier={tier} species={poke.species} compact={true} />
HP {poke.hp}/{poke.max_hp}
"bg-base-content/20" poke.hp / poke.max_hp > 0.5 -> "bg-success" poke.hp / poke.max_hp > 0.2 -> "bg-warning" true -> "bg-error" end ]} style={"width: #{if poke.max_hp > 0, do: Float.round(poke.hp / poke.max_hp * 100, 1), else: 0}%"} />
<%!-- Evolution info for opponent Pokémon --%>
<.icon name="hero-arrow-trending-up" class="size-3 text-accent/50" /> Evolves into
<%= for evo <- evos do %> <% evo_tier = Map.get(@tier_list, evo, nil) %>
{evo} {evo} <.tier_badge :if={evo_tier} tier={evo_tier} species={evo} compact={true} />
<% end %>
<% end %>
<% end %>
""" end end