class CwCardUtils::ScryfallCmcData

Uses Singleton pattern to avoid loading the large JSON file multiple times
Handles conversion mana cost (CMC) data for Magic: The Gathering cards

def build_card_index

def build_card_index
  @card_index = {}
  @data.each do |card|
    @card_index[card["name"]] = card
  end
end

def cmc_data

def cmc_data
  load_data_if_needed
  @data
end

def find_card(name)

def find_card(name)
  load_data_if_needed
  @card_index[name] || @found_cards[name] ||= linear_search(name)
rescue StandardError
  nil
end

def initialize

def initialize
  super
  @data = nil
  @card_index = nil
  @found_cards = {}
end

def linear_search(name)

def linear_search(name)
  @data.find { |card| card["name"] == name }
end

def load_data_if_needed

def load_data_if_needed
  return if @data
  @data = JSON.parse(File.read(File.expand_path("../../data/scryfall.cards.cmc.json", __dir__)))
  build_card_index
end