export enum Colour {
  Black = "Black",
  Red = "Red",
  Orange = "Orange",
  Yellow = "Yellow",
  Green = "Green",
  Blue = "Blue",
  Pink = "Pink",
  Purple = "Purple",
  White = "White",
  Brown = "Brown",
  Cyan = "Cyan",
}

export type ColouredOpt<T extends string = string> = `${T} ${Colour}` | "None";

export enum Hats {
  Headtie = "Beginner Headtie",
  CommanderHat = "Commander Hat",
  TopHat = "Top Hat",
  BackCap = "Back Cap",
  TheItem = "The Item",
  TrafficCone = "Traffic Cone",
  FirstPartyHat = "1st Party Hat",
  MasterTransceivers = "Master Transceivers",
  BuilderHelmet = "Builder Helmet",
}

export enum Faces {
  DWI = "Deal with it",
  EyeMask = "Eye Mask",
}

export enum Eyes {
  Serious = "Serious",
  Angry = "Angry",
  Confused = "Confused",
  Cheerful = "Cheerful",
  Tired = "Tired",
  Excited = "Excited",
  Dizzy = "Dizzy",
  Worried = "Worried",
  Dead = "Dead",
}

export enum Tops {
  Sash = "Sash",
  SideCloak = "Side Cloak",
  BizznizzTie = "Bizznizz Tie",
  HouseVibeHoodie = "House Vibe Hoodie",
  CasualBelt = "Casual Belt",
}

export enum Bottoms {
  KneePads = "Knee Pads",
  Skirt = "Skirt",
  BattlerDrip = "Battler Drip",
  SupportBoots = "Support Boots",
}

export enum Buddies {
  Battler = "Battler",
  HouseVibe = "House Vibe",
  LockBlock = "Lock Block",
  BattleSpecial = "Battle Special",
  BattleSupport = "Battle Support",
  Houseannor = "Houseannor",
  Ranger = "Ranger",
  PCSB = "PCSB",
  PLR = "PLR",
  Basketiballu = "Basketiballu",
  StartingMountain = "Starting Mountain",
  Olivia = "Olivia",
  PrototypeRanger = "Prototype Ranger",
  DEMUL = "DEMUL",
  IncomingSword = "Incoming Sword",
  MARZBall = "MARZ Ball",
  NoodleTheKitten = "Noodle the Kitten",
  CakeDay = "Cake Day",
  MasterOG = "Master OG",
  BattleBuilder = "Battle Builder",
}

export enum Backs {
  BattleSword = "Battle Sword",
  Tail = "Tail",
  GenericPole = "Generic Pole",
  BattleHammer = "Battle Hammer",
  BattleScythe = "Battle Scythe",
  BattleSpear = "Battle Spear",
  THEFIRE = "THE FIRE",
  GracefulWings = "Graceful Wings",
}

export enum Necks {
  NeckChain = "Neck Chain",
  OneKChain = "1K Chain",
}

export enum Opponents {
  None = "None",
  BattleBeginner = "BattleBeginner",
  BattleBeginner2024 = "BattleBeginner2024",
  BattleCasual = "BattleCasual",
  BattlePro = "BattlePro",
  BattleMaster = "BattleMaster",
  Battler = "Battler",
  BattlerElite = "BattlerElite",
  RapStar = "RapStar",
  ArtMaster = "ArtMaster",
  TheInterrogator = "TheInterrogator",
  CommonOverseer = "CommonOverseer",
  Moonlite = "Moonlite",
  Dicey = "Dicey",
  Kacey = "Kacey",
  Lexa = "Lexa",
  Delta = "Delta",
  DoodlePro = "DoodlePro",
  GuitarHero = "GuitarHero",
  SmallKeyMaster = "SmallKeyMaster",
  RareOverseer = "RareOverseer",
  DEMUL = "DEMUL",
  AgentZ = "AgentZ",
  MediumKeyMaster = "MediumKeyMaster",
  IncomingSword = "IncomingSword",
  Eda = "Eda",
  TheFirewall = "TheFirewall",
  HouseannorSupport = "HouseannorSupport",
  Dicey2024 = "Dicey2024",
  CakeDay = "CakeDay",
  MasterOG = "MasterOG",
}

export enum CommunityOpponents {
  None = "None",
  Stik = "Stik",
  ThisMessage = "ThisMessage",
  ProjectIX = "ProjectIX",
  ProjectX = "ProjectX",
  WastelanderGrimmeras = "WastelanderGrimmeras",
  RabidWastelanderGrimmeras = "RabidWastelanderGrimmeras",
}

export enum Hair {
  BeginnerSpikes = "Beginner Spikes",
  CasualFro = "Casual Fro",
  ProfessionalCut = "Pro Cut",
  SpeciallyLong = "Specially Long",
  SupportShort = "Support Short",
  BuilderTwintails = "Builder Twintails",
  BuddyCut = "Buddy Cut",
  SimpleFringe = "Simple Fringe",
  SuperSlick = "Super Slick",
  GenericSpiky = "Generic Spiky",
}

export enum UpperBottom {}

export enum UpperTop {}

export type GenerateBattlerOptions = {
  colour: Colour;
  hat?: ColouredOpt<Hats>;
  face?: ColouredOpt<Faces>;
  top?: ColouredOpt<Tops>;
  bottom?: ColouredOpt<Bottoms>;
  buddy?: Buddies | "None";
  back?: ColouredOpt<Backs>;
  neck?: ColouredOpt<Necks>;
  glow?: Colour | "None";
  eye?: ColouredOpt<Eyes>;

  hair?: ColouredOpt<Hair>;
  upperBottom?: ColouredOpt<UpperBottom>;
  upperTop?: ColouredOpt<UpperTop>;
};

export enum PlayerActions {
  AttackLeft = "Attack Left",
  DefendLeft = "Defend Left",
  ItemLeft   = "Item Left",
  AttackRight = "Attack Right",
  DefendRight = "Defend Right",
  ItemRight = "Item Right"
}

export type PlayerActionOptions = {
  action: PlayerActions;
  player: string;
};

export type GenerateBattleImageOptions = {
  opponent: Opponents;
  username: string;
};

export type CustomActionOptions = {
  background: string;
  player: string;
  position: "left" | "middle"
}