module GranblueEnums
  extend ActiveSupport::Concern

  # Define constants for shared enum mappings.
  RARITIES = { R: 1, SR: 2, SSR: 3 }.freeze
  ELEMENTS = { Null: 0, Wind: 1, Fire: 2, Water: 3, Earth: 4, Dark: 5, Light: 6 }.freeze
  GENDERS = { Unknown: 0, Male: 1, Female: 2, "Male/Female": 3 }.freeze

  # Single proficiency enum mapping used for both proficiency1 and proficiency2.
  PROFICIENCY = {
    None: 0,
    Sabre: 1,
    Dagger: 2,
    Axe: 3,
    Spear: 4,
    Bow: 5,
    Staff: 6,
    Melee: 7,
    Harp: 8,
    Gun: 9,
    Katana: 10
  }.freeze

  # Single race enum mapping used for both race1 and race2.
  RACES = {
    Unknown: 0,
    Human: 1,
    Erune: 2,
    Draph: 3,
    Harvin: 4,
    Primal: 5,
    None: 6
  }.freeze

  # Character seasons - display disambiguation for seasonal variants (e.g., "Vane [Halloween]")
  # If no season, value should be nil (not a default value)
  CHARACTER_SEASONS = {
    Valentine: 1,
    Formal: 2,
    Summer: 3,
    Halloween: 4,
    Holiday: 5
  }.freeze

  # Character series - represents character identity/pool membership (can have multiple)
  CHARACTER_SERIES = {
    Standard: 1,
    Grand: 2,
    Zodiac: 3,
    Promo: 4,
    Collab: 5,
    Eternal: 6,
    Evoker: 7,
    Saint: 8,
    Fantasy: 9,
    Summer: 10,
    Yukata: 11,
    Valentine: 12,
    Halloween: 13,
    Formal: 14,
    Holiday: 15,
    Event: 16
  }.freeze

  # Gacha promotions - which pools/banners a weapon or summon appears in
  PROMOTIONS = {
    Premium: 1,
    Classic: 2,
    ClassicII: 3,
    Flash: 4,
    Legend: 5,
    Valentine: 6,
    Summer: 7,
    Halloween: 8,
    Holiday: 9,
    Collab: 10,
    Formal: 11
  }.freeze
end
