module Backlog
  # The uniform board contract every os-backlog board must have: list order
  # and the enforced label set. Values only — no client/network code.
  module BoardSpec
    # Lists in required left-to-right order.
    LISTS = %w[Backlog Next Doing Waiting Review Done].freeze

    # Label name => ordered candidate colors, tried in turn until the server
    # accepts one (Planka's palette-name whitelist is not documented, so we
    # can't assert it in advance — cf. planka-api gem's Priority::COLOR_CANDIDATES
    # pattern). The first candidate in each list is the verified-good default.
    LABEL_COLOR_CANDIDATES = {
      "P0" => %w[berry-red red-burgundy salsa-red],
      "P1" => %w[pumpkin-orange orange-peel sunset-orange],
      "P2" => %w[egg-yellow sunny-grass bright-moss],
      "P3" => %w[steel-grey morning-sky light-cocoa],
      "hitl" => %w[tank-green bright-moss lagoon-blue],
      "semi" => %w[lagoon-blue summer-sky navy-blue],
      "afk-ready" => %w[antique-blue bright-moss slate-blue]
    }.freeze

    LABEL_NAMES = LABEL_COLOR_CANDIDATES.keys.freeze

    ARCHIVE_PREFIX = "archived--"

    class << self
      def archived_name(name) = "#{ARCHIVE_PREFIX}#{name}"

      def archived?(name) = name.to_s.start_with?(ARCHIVE_PREFIX)

      def active_name(name) = archived?(name) ? name.sub(ARCHIVE_PREFIX, "") : name
    end
  end
end
