class Goals::StatusPillComponent < ApplicationComponent
  # Text colors here intentionally use palette steps (green/yellow/gray-700)
  # instead of the `text-success` / `text-warning` / `text-secondary` tokens
  # because the functional tokens drop below WCAG 1.4.3 4.5:1 on tinted
  # surfaces in light mode (~2.88:1 / 3.0:1 / 4.16:1). Each variant carries
  # a theme-dark: override so the dark-700 text doesn't disappear against
  # the dark-mode tinted surface. Local override only; revert once
  # we-promise/sure#1736 lands token-level fixes.
  VARIANTS = {
    on_track: { classes: "bg-green-500/10 text-green-700 theme-dark:text-green-300", icon: "circle-check" },
    behind: { classes: "bg-yellow-500/10 text-yellow-700 theme-dark:text-yellow-300", icon: "triangle-alert" },
    reached: { classes: "bg-green-500/10 text-green-700 theme-dark:text-green-300", icon: "star" },
    no_target_date: { classes: "bg-surface-inset text-gray-700 theme-dark:text-gray-200", icon: "infinity" },
    paused: { classes: "bg-surface-inset text-gray-700 theme-dark:text-gray-200", icon: "pause" },
    archived: { classes: "bg-surface-inset text-gray-700 theme-dark:text-gray-200", icon: "archive" }
  }.freeze

  def initialize(goal:)
    @goal = goal
  end

  def status_key
    @goal.display_status
  end

  def variant
    VARIANTS.fetch(status_key, VARIANTS[:no_target_date])
  end

  def label
    I18n.t("goals.status.#{status_key}")
  end

  def classes
    variant[:classes]
  end

  def icon_name
    variant[:icon]
  end
end
