<%= icon "chevron-right", class: "group-open:rotate-90 motion-safe:transition-transform motion-safe:duration-150" %>
<%= tag.p simplefin_item.name, class: "font-medium text-primary" %>
<% if simplefin_item.scheduled_for_deletion? %>
<%= t(".deletion_in_progress") %>
<% end %>
<% if simplefin_item.accounts.any? %>
<%= simplefin_item.institution_summary %>
<%# Extra inline badges from latest sync stats - only show warnings %>
<% stats = (@simplefin_sync_stats_map || {})[simplefin_item.id] || {} %>
<% has_warnings = stats["accounts_skipped"].to_i > 0 ||
stats["rate_limited"].present? ||
stats["rate_limited_at"].present? ||
stats["total_errors"].to_i > 0 ||
(stats["errors"].is_a?(Array) && stats["errors"].any?) %>
<% if has_warnings %>
<% if stats["accounts_skipped"].to_i > 0 %>
<%= render DS::Tooltip.new(text: t(".accounts_skipped_tooltip"), icon: "alert-triangle", size: "sm", color: "warning", as: :span) %>
<%= t(".accounts_skipped_label", count: stats["accounts_skipped"].to_i) %>
<% end %>
<% if stats["rate_limited"].present? || stats["rate_limited_at"].present? %>
<% ts = stats["rate_limited_at"] %>
<% ago = (ts.present? ? (begin; time_ago_in_words(Time.parse(ts)); rescue StandardError; nil; end) : nil) %>
<%= render DS::Tooltip.new(
text: (ago ? t(".rate_limited_ago", time: ago) : t(".rate_limited_recently")),
icon: "clock",
size: "sm",
color: "warning",
as: :span
) %>
<% end %>
<% if stats["total_errors"].to_i > 0 || (stats["errors"].is_a?(Array) && stats["errors"].any?) %>
<% tooltip_text = simplefin_error_tooltip(stats) %>
<% if tooltip_text.present? %>
<%= render DS::Tooltip.new(text: tooltip_text, icon: "alert-octagon", size: "sm", color: "warning", as: :span) %>
<% end %>
<% end %>
<% end %>
<% end %>
<%# Determine if all reported errors are benign duplicate-skips (suppress scary banner). Computed in controller for testability. %>
<% duplicate_only_errors = (@simplefin_duplicate_only_map || {})[simplefin_item.id] || false %>
<% if simplefin_item.syncing? %>
<%= icon "loader", size: "sm", class: "animate-spin" %>
<%= tag.span t(".syncing") %>
<% elsif simplefin_item.requires_update? %>
<%= icon "alert-triangle", size: "sm", color: "warning" %>
<%= tag.span t(".requires_update") %>
<% elsif (stale_status = simplefin_item.stale_sync_status)[:stale] %>
<%= icon "alert-circle", size: "sm", color: "warning" %>
<%= tag.span stale_status[:message], class: "text-sm" %>
<% elsif (pending_status = simplefin_item.stale_pending_status)[:count] > 0 %>
<%= icon "clock", size: "sm", color: "secondary" %>
<%= tag.span pending_status[:message], class: "text-sm" %>
<%= t(".stale_pending_note") %>
<% if pending_status[:accounts]&.any? %>
<%= t(".stale_pending_accounts", accounts: pending_status[:accounts].join(", ")) %>
<% end %>
<% elsif (reconciled_status = simplefin_item.last_sync_reconciled_status)[:count] > 0 %>
<%= icon "check-circle", size: "sm", color: "success" %>
<%= tag.span reconciled_status[:message], class: "text-sm" %>
<%= t(".reconciled_details_note") %>
<% elsif simplefin_item.rate_limited_message.present? %>
<%= icon "clock", size: "sm", color: "warning" %>
<%= tag.span simplefin_item.rate_limited_message %>
<% elsif simplefin_item.sync_error.present? && !duplicate_only_errors %>
<%= render DS::Tooltip.new(text: simplefin_item.sync_error, icon: "alert-circle", size: "sm", color: "destructive", as: :span) %>
<%= tag.span t(".error"), class: "text-destructive" %>
<% elsif duplicate_only_errors %>
<%= icon "info", size: "sm" %>
<%= tag.span t(".duplicate_accounts_skipped"), class: "text-secondary" %>
<% else %>
<% if simplefin_item.last_synced_at %>
<% if simplefin_item.sync_status_summary %>
<%= t(".status_with_summary", timestamp: time_ago_in_words(simplefin_item.last_synced_at), summary: simplefin_item.sync_status_summary) %>
<% else %>
<%= t(".status", timestamp: time_ago_in_words(simplefin_item.last_synced_at)) %>
<% end %>
<% else %>
<%= t(".status_never") %>
<% end %>
<% end %>