export enum GPortalRoutes {
  Api = 'https://www.g-portal.com/ngpapi/',
  Token = 'https://auth.g-portal.com/auth/realms/master/protocol/openid-connect/token',
  WS = 'wss://www.g-portal.com/ngpapi/',
  Origin = 'https://www.g-portal.com',
  Home = 'https://www.g-portal.com/en',
  Auth = 'https://auth.g-portal.com/auth/realms/master/protocol/openid-connect/auth',
}

export enum PlayerKillType {
  Natural = 'Natural',
  Entity = 'Entity',
  Player = 'Player',
  Npc = 'Npc',
}

export const playerKillData = [
  {
    id: 'thirst',
    name: 'Thirst',
    type: PlayerKillType.Natural,
  },
  {
    id: 'hunger',
    name: 'Hunger',
    type: PlayerKillType.Natural,
  },
  {
    id: 'guntrap.deployed',
    name: 'Shotgun Trap',
    type: PlayerKillType.Entity,
  },
  {
    id: 'pee pee 9000',
    name: 'Pee Pee 9000',
    type: PlayerKillType.Natural,
  },
  {
    id: 'barricade.wood',
    name: 'Wooden Barricade',
    type: PlayerKillType.Entity,
  },
  {
    id: 'wall.external.high.stone',
    name: 'High External Stone Wall',
    type: PlayerKillType.Entity,
  },
  {
    id: 'wall.external.high',
    name: 'High External Wooden Wall',
    type: PlayerKillType.Entity,
  },
  {
    id: 'gates.external.high.wood',
    name: 'High External Wooden Gate',
    type: PlayerKillType.Entity,
  },
  {
    id: 'gates.external.high.stone',
    name: 'High External Stone Gate',
    type: PlayerKillType.Entity,
  },
  {
    id: 'gates.external.high.wood (entity)',
    name: 'High External Wooden Gate',
    type: PlayerKillType.Entity,
  },
  {
    id: 'gates.external.high.stone (entity)',
    name: 'High External Stone Gate',
    type: PlayerKillType.Entity,
  },
  {
    id: 'flameturret_fireball (entity)',
    name: 'Flame Turret',
    type: PlayerKillType.Entity,
  },
  {
    id: 'icewall (entity)',
    name: 'Ice Wall',
    type: PlayerKillType.Entity,
  },
  {
    id: 'wall.external.high.wood (entity)',
    name: 'High External Wooden Wall',
    type: PlayerKillType.Entity,
  },
  {
    id: 'wall.external.high.ice (entity)',
    name: 'High External Ice Wall',
    type: PlayerKillType.Entity,
  },
  {
    id: 'bear',
    name: 'Bear',
    type: PlayerKillType.Npc,
  },
  {
    id: 'autoturret_deployed',
    name: 'Auto Turret',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cold',
    name: 'Cold',
    type: PlayerKillType.Natural,
  },
  {
    id: 'bleeding',
    name: 'Bleeding',
    type: PlayerKillType.Natural,
  },
  {
    id: 'boar',
    name: 'Boar',
    type: PlayerKillType.Npc,
  },
  {
    id: 'wolf',
    name: 'Wolf',
    type: PlayerKillType.Npc,
  },
  {
    id: 'fall',
    name: 'Fall',
    type: PlayerKillType.Natural,
  },
  {
    id: 'drowned',
    name: 'Drowned',
    type: PlayerKillType.Natural,
  },
  {
    id: 'radiation',
    name: 'Radiation',
    type: PlayerKillType.Natural,
  },
  {
    id: 'autoturret_deployed (entity)',
    name: 'Auto Turret',
    type: PlayerKillType.Entity,
  },
  {
    id: 'bear (bear)',
    name: 'Bear',
    type: PlayerKillType.Npc,
  },
  {
    id: 'boar (boar)',
    name: 'Boar',
    type: PlayerKillType.Npc,
  },
  {
    id: 'wolf (wolf)',
    name: 'Wolf',
    type: PlayerKillType.Npc,
  },
  {
    id: 'guntrap.deployed (entity)',
    name: 'Shotgun Trap',
    type: PlayerKillType.Entity,
  },
  {
    id: 'fall!',
    name: 'Fall',
    type: PlayerKillType.Natural,
  },
  {
    id: 'lock.code (entity)',
    name: 'Code Lock',
    type: PlayerKillType.Entity,
  },
  {
    id: 'bradleyapc (entity)',
    name: 'Bradley APC',
    type: PlayerKillType.Npc,
  },
  {
    id: 'wall.external.high.stone (entity)',
    name: 'High External Stone Wall',
    type: PlayerKillType.Entity,
  },
  {
    id: 'wall.external.high (entity)',
    name: 'High External Wooden Wall',
    type: PlayerKillType.Entity,
  },
  {
    id: 'barricade.metal (entity)',
    name: 'Metal Barricade',
    type: PlayerKillType.Entity,
  },
  {
    id: 'spikes.floor (entity)',
    name: 'Floor Spikes',
    type: PlayerKillType.Entity,
  },
  {
    id: 'sentry.bandit.static (entity)',
    name: 'Bandit Sentry',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cactus-1 (entity)',
    name: 'Cactus',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cactus-2 (entity)',
    name: 'Cactus',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cactus-3 (entity)',
    name: 'Cactus',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cactus-4 (entity)',
    name: 'Cactus',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cactus-5 (entity)',
    name: 'Cactus',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cactus-6 (entity)',
    name: 'Cactus',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cactus-7 (entity)',
    name: 'Cactus',
    type: PlayerKillType.Entity,
  },
  {
    id: 'landmine (entity)',
    name: 'Landmine',
    type: PlayerKillType.Entity,
  },
  {
    id: 'sentry.scientist.static (entity)',
    name: 'Scientist Sentry',
    type: PlayerKillType.Entity,
  },
  {
    id: 'patrolhelicopter (entity)',
    name: 'Patrol Helicopter',
    type: PlayerKillType.Npc,
  },
  {
    id: 'flameturret.deployed (entity)',
    name: 'Flame Turret',
    type: PlayerKillType.Entity,
  },
  {
    id: 'oilfireballsmall (entity)',
    name: 'Small Oil Fire',
    type: PlayerKillType.Entity,
  },
  {
    id: 'napalm (entity)',
    name: 'Napalm',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cargoshipdynamic2 (entity)',
    name: 'Cargo Ship',
    type: PlayerKillType.Entity,
  },
  {
    id: 'cargoshipdynamic1 (entity)',
    name: 'Cargo Ship',
    type: PlayerKillType.Entity,
  },
  {
    id: 'barricade.wood (entity)',
    name: 'Wooden Barricade',
    type: PlayerKillType.Entity,
  },
  {
    id: 'beartrap (entity)',
    name: 'Bear Trap',
    type: PlayerKillType.Entity,
  },
  {
    id: 'barricade.woodwire (entity)',
    name: 'Wooden Barricade',
    type: PlayerKillType.Entity,
  },
  {
    id: 'campfire (entity)',
    name: 'Campfire',
    type: PlayerKillType.Entity,
  },
  {
    id: 'rocket_crane_lift_trigger (entity)',
    name: 'Crane Lift',
    type: PlayerKillType.Entity,
  },
  {
    id: 'rowboat (entity)',
    name: 'Rowboat',
    type: PlayerKillType.Entity,
  },
  {
    id: 'fireball (entity)',
    name: 'Fireball',
    type: PlayerKillType.Entity,
  },
  {
    id: 'teslacoil.deployed (entity)',
    name: 'Tesla Coil',
    type: PlayerKillType.Entity,
  },
  {
    id: 'hotairballoon (entity)',
    name: 'Hot Air Balloon',
    type: PlayerKillType.Entity,
  },
  {
    id: 'minicopter.entity (entity)',
    name: 'Minicopter',
    type: PlayerKillType.Entity,
  },
  {
    id: 'attackhelicopter.entity (entity)',
    name: 'Attack Helicopter',
    type: PlayerKillType.Entity,
  },
  {
    id: 'scraptransporthelicopter (entity)',
    name: 'Scrap Transport Helicopter',
    type: PlayerKillType.Entity,
  },
];

export enum RCEEvent {
  Message = 'MESSAGE',
  ServerReady = 'SERVER_READY',
  ServiceStatus = 'SERVICE_STATUS',
  ServiceSensor = 'SERVICE_SENSOR',
  ExecutingCommand = 'EXECUTING_COMMAND',
  VendingMachineName = 'VENDING_MACHINE_NAME',
  QuickChat = 'QUICK_CHAT',
  PlayerSuicide = 'PLAYER_SUICIDE',
  PlayerRespawned = 'PLAYER_RESPAWNED',
  CustomZoneCreated = 'CUSTOM_ZONE_CREATED',
  CustomZoneRemoved = 'CUSTOM_ZONE_REMOVED',
  PlayerRoleAdd = 'PLAYER_ROLE_ADD',
  PlayerRoleRemove = 'PLAYER_ROLE_REMOVE',
  ItemSpawn = 'ITEM_SPAWN',
  NoteEdit = 'NOTE_EDIT',
  TeamCreate = 'TEAM_CREATE',
  TeamJoin = 'TEAM_JOIN',
  TeamLeave = 'TEAM_LEAVE',
  TeamInvite = 'TEAM_INVITE',
  TeamInviteCancel = 'TEAM_INVITE_CANCEL',
  TeamPromoted = 'TEAM_PROMOTED',
  KitSpawn = 'KIT_SPAWN',
  KitGive = 'KIT_GIVE',
  SpecialEventSet = 'SPECIAL_EVENT_SET',
  EventStart = 'EVENT_START',
  PlayerKill = 'PLAYER_KILL',
  PlayerJoined = 'PLAYER_JOINED',
  PlayerLeft = 'PLAYER_LEFT',
  PlayerListUpdated = 'PLAYER_LIST_UPDATED',
  FrequencyGained = 'FREQUENCY_GAINED',
  FrequencyLost = 'FREQUENCY_LOST',
  Error = 'ERROR',
}

export enum QuickChat {
  COMBAT_WereUnderAttack = 'd11_quick_chat_combat_slot_0',
  COMBAT_Retreat = 'd11_quick_chat_combat_slot_1',
  COMBAT_MoveOut = 'd11_quick_chat_combat_slot_2',
  COMBAT_DontShoot = 'd11_quick_chat_combat_slot_3',
  COMBAT_BeCareful = 'd11_quick_chat_combat_slot_4',
  COMBAT_TheyreBetterArmed = 'd11_quick_chat_combat_slot_5',
  COMBAT_ImOutOfAmmo = 'd11_quick_chat_combat_slot_6',
  COMBAT_ImHurt = 'd11_quick_chat_combat_slot_7',
  BUILDING_UpgradeWalls = 'd11_quick_chat_building_slot_0',
  BUILDING_NeedBeds = 'd11_quick_chat_building_slot_1',
  BUILDING_NeedBuildingPermission = 'd11_quick_chat_building_slot_2',
  BUILDING_WhatsDoorCode = 'd11_quick_chat_building_slot_3',
  BUILDING_CanIHaveKey = 'd11_quick_chat_building_slot_4',
  BUILDING_NeedBetterDoor = 'd11_quick_chat_building_slot_5',
  BUILDING_UpkeepRunningLow = 'd11_quick_chat_building_slot_6',
  BUILDING_WhichChestFreeGame = 'd11_quick_chat_building_slot_7',
  ACTIVITIES_GoingForStone = 'd11_quick_chat_activities_phrase_format d11_Stone',
  ACTIVITIES_GoingForWood = 'd11_quick_chat_activities_phrase_format d11_Wood',
  ACTIVITIES_GoingForMetal = 'd11_quick_chat_activities_phrase_format d11_Metal',
  ACTIVITIES_GoingForFood = 'd11_quick_chat_activities_phrase_format d11_Food',
  ACTIVITIES_GoingForWater = 'd11_quick_chat_activities_phrase_format d11_Water',
  ACTIVITIES_GoingForScrap = 'd11_quick_chat_activities_phrase_format d11_Scrap',
  ACTIVITIES_GoingForMetalFragments = 'd11_quick_chat_activities_phrase_format d11_Metal_Fragments',
  ACTIVITIES_GoingForMedicine = 'd11_quick_chat_activities_phrase_format d11_Medicine',
  QUESTIONS_AreYouFriendly = 'd11_quick_chat_questions_slot_0',
  QUESTIONS_CanIBuildAroundHere = 'd11_quick_chat_questions_slot_1',
  QUESTIONS_DoYouWantToTeamUp = 'd11_quick_chat_questions_slot_2',
  QUESTIONS_DoYouNeedAnything = 'd11_quick_chat_questions_slot_3',
  QUESTIONS_CouldYouHelpMe = 'd11_quick_chat_questions_slot_4',
  QUESTIONS_WantToTrade = 'd11_quick_chat_questions_slot_5',
  QUESTIONS_WhosThere = 'd11_quick_chat_questions_slot_6',
  QUESTIONS_CanIEnter = 'd11_quick_chat_questions_slot_7',
  RESPONSES_Yes = 'd11_quick_chat_responses_slot_0',
  RESPONSES_No = 'd11_quick_chat_responses_slot_1',
  RESPONSES_OK = 'd11_quick_chat_responses_slot_2',
  RESPONSES_ThankYou = 'd11_quick_chat_responses_slot_3',
  RESPONSES_NoProblem = 'd11_quick_chat_responses_slot_4',
  RESPONSES_Hello = 'd11_quick_chat_responses_slot_5',
  RESPONSES_Goodbye = 'd11_quick_chat_responses_slot_6',
  RESPONSES_ImSorry = 'd11_quick_chat_responses_slot_7',
  ORDERS_FollowMe = 'd11_quick_chat_orders_slot_0',
  ORDERS_GoAway = 'd11_quick_chat_orders_slot_1',
  ORDERS_RepairThis = 'd11_quick_chat_orders_slot_2',
  ORDERS_WaitHere = 'd11_quick_chat_orders_slot_3',
  ORDERS_ComeIn = 'd11_quick_chat_orders_slot_4',
  ORDERS_LetsGo = 'd11_quick_chat_orders_slot_5',
  ORDERS_HereTakeThis = 'd11_quick_chat_orders_slot_6',
  ORDERS_HurryUp = 'd11_quick_chat_orders_slot_7',
  LOCATION_North = 'd11_quick_chat_location_slot_0',
  LOCATION_NorthEast = 'd11_quick_chat_location_slot_1',
  LOCATION_East = 'd11_quick_chat_location_slot_2',
  LOCATION_SouthEast = 'd11_quick_chat_location_slot_3',
  LOCATION_South = 'd11_quick_chat_location_slot_4',
  LOCATION_SouthWest = 'd11_quick_chat_location_slot_5',
  LOCATION_West = 'd11_quick_chat_location_slot_6',
  LOCATION_NorthWest = 'd11_quick_chat_location_slot_7',
  NEED_Scrap = 'd11_quick_chat_i_need_phrase_format d11_Scrap',
  NEED_LowGradeFuel = 'd11_quick_chat_i_need_phrase_format lowgradefuel',
  NEED_Food = 'd11_quick_chat_i_need_phrase_format d11_Food',
  NEED_Water = 'd11_quick_chat_i_need_phrase_format d11_Water',
  NEED_Wood = 'd11_quick_chat_i_need_phrase_format d11_Wood',
  NEED_Stone = 'd11_quick_chat_i_need_phrase_format stones',
  NEED_MetalFragments = 'd11_quick_chat_i_need_phrase_format d11_Metal_Fragments',
  NEED_HighQualityMetal = 'd11_quick_chat_i_need_phrase_format metal.refined',
  HAVE_Scrap = 'd11_quick_chat_i_have_phrase_format d11_Scrap',
  HAVE_LowGradeFuel = 'd11_quick_chat_i_have_phrase_format lowgradefuel',
  HAVE_Food = 'd11_quick_chat_i_have_phrase_format d11_Food',
  HAVE_Water = 'd11_quick_chat_i_have_phrase_format d11_Water',
  HAVE_HuntingBow = 'd11_quick_chat_i_have_phrase_format bow.hunting',
  HAVE_Pickaxe = 'd11_quick_chat_i_have_phrase_format pickaxe',
  HAVE_Hatchet = 'd11_quick_chat_i_have_phrase_format hatchet',
  HAVE_HighQualityMetal = 'd11_quick_chat_i_have_phrase_format metal.refined',
}

export enum RCEIntent {
  All = 'ALL',
  ConsoleMessages = 'CONSOLE_MESSAGES',
  ServiceState = 'SERVICE_STATE',
  ServiceSensors = 'SERVICE_SENSORS',
}

export enum LogLevel {
  None = 0,
  Error = 1,
  Warn = 2,
  Info = 3,
  Debug = 4,
}

export const RegularExpressions: { [key: string]: RegExp } = {
  AIO_RPC_Error: new RegExp(/status\s*=\s*([^\n]+)\s+details\s*=\s*"([^"]+)"/),
  Log: new RegExp(/(\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}):LOG: (.+)$/),
  CommandExecuting: new RegExp(/Executing console system command '([^']+)'/),
  VendingMachineName: new RegExp(
    /\[VENDING MACHINE\] Player \[ ([^\]]+) \] changed name from \[ ([^\]]+) \] to \[ ([^\]]+) \]/
  ),
  QuickChat: new RegExp(/(\[CHAT (TEAM|SERVER|LOCAL)\]) ([\w\s\-_]+) : (.+)/),
  CustomZoneCreated: new RegExp(/Successfully created zone \[([\w\d\s_-]+)\]/),
  CustomZoneRemoved: new RegExp(/Successfully removed zone \[([\w\d\s_-]+)\]/),
  PlayerRoleAdd: new RegExp(
    /\[([\w\s-]+)] Added \[([\w\s-]+)] to Group \[([\w\s-]+)]/
  ),
  PlayerRoleRemove: new RegExp(
    /\[([\w\s-]+)] Removed \[([\w\s-]+)] from Group \[([\w\s-]+)]/
  ),
  ItemSpawn: new RegExp(
    /\bgiving ([\w\s._-]+) ([\d.]+) x ([\w\s._-]+(?: [\w\s._-]+)*)\b/
  ),
  NoteEdit: new RegExp(
    /\[NOTE PANEL\] Player \[ ([^\]]+) \] changed name from \[\s*([\s\S]*?)\s*\] to \[\s*([\s\S]*?)\s*\]/
  ),
  TeamCreate: new RegExp(/\[([^\]]+)\] created a new team, ID: (\d+)/),
  TeamJoin: new RegExp(
    /\[([^\]]+)\] has joined \[([^\]]+)]s team, ID: \[(\d+)\]/
  ),
  TeamLeave: new RegExp(
    /\[([^\]]+)\] has left \[([^\]]+)]s team, ID: \[(\d+)\]/
  ),
  TeamInvite: new RegExp(
    /\[([\w\s]+)] has invited \[([\w-]+)] to their team ID: \[(\d+)]/
  ),
  TeamInviteCancel: new RegExp(
    /\[([\w\s-]+)] canceled the invitation for \[([\w\s-]+)] to their team, ID: \[(\d+)]/
  ),
  TeamPromoted: new RegExp(
    /\[([\w\s-]+)] promoted \[([\w\s-]+)] as their new leader of the team, ID: \[(\d+)]/
  ),
  KitSpawn: new RegExp(/SERVER giving (.+?) kit (\w+)/),
  KitGive: new RegExp(
    /\[ServerVar\] ([\w\s_-]+) giving ([\w\s_-]+) kit ([\w\s_-]+)/
  ),
  SpecialEventSet: new RegExp(/Setting event as :(\w+)/),
};
