#pragma once

namespace Datas {
	struct Language {
		enum Languages {
			en_US,
			es_PE
		};
		inline static Languages language;

		struct Classes {
			struct Module {
				struct Combat {
					struct TeleportAura {
						inline static std::string name;
						inline static std::string description;
					};
					inline static TeleportAura teleportaura;
				};
				inline static Combat combat;
				
				struct Render {
					struct ClickGui {
						inline static std::string name;
						inline static std::string description;

						inline static std::string combat_category;
						inline static std::string render_category;
						inline static std::string movement_category;
						inline static std::string player_category;
						inline static std::string exploit_category;
						inline static std::string ghost_category;
						inline static std::string other_category;

					};
					inline static ClickGui clickgui;

					struct HitEffects {
						inline static std::string name;
						inline static std::string description;

						inline static std::string mode;
						inline static std::string mode_1;
						inline static std::string mode_2;

						inline static std::string delay;
						inline static std::string removedelay;
						inline static std::string roundness;
						inline static std::string size;
						inline static std::string amount;
						inline static std::string speed;
					};
					inline static HitEffects hiteffects;

					struct KillEffects {
						inline static std::string name;
						inline static std::string description;

						inline static std::string mode;
						inline static std::string mode_1;
						inline static std::string mode_2;

						inline static std::string removedelay;
						inline static std::string roundness;
						inline static std::string size;
						inline static std::string amount;
						inline static std::string speed;
					};
					inline static KillEffects killeffects;
				};
				inline static Render render;

				struct Movement {
				};
				inline static Movement movement;
				
				struct Player {
					struct ChestStealer {
						inline static std::string name;
						inline static std::string description;
					};
					inline static ChestStealer cheststealer;

					struct InventoryManager {
						inline static std::string name;
						inline static std::string description;
					};
					inline static InventoryManager inventorymanager;

					struct InventorySync {
						inline static std::string name;
						inline static std::string description;
					};
					inline static InventorySync inventorysync;
				};
				inline static Player player;

				struct Ghost {
					struct WTap {
						inline static std::string name;
						inline static std::string description;
					};
					inline static WTap wtap;
				};
				inline static Ghost ghost;

				struct Other {
					struct SecurityFeatures {
						inline static std::string name;
						inline static std::string description;
						inline static std::string patched_message_1;
					};
					inline static SecurityFeatures securityfeatures;
					struct CheatDetector {
						inline static std::string name;
						inline static std::string description;
					};
					inline static CheatDetector cheatdetector;
					struct AutoGG {
						inline static std::string name;
						inline static std::string description;
					};
					inline static AutoGG autogg;
					struct RichPresence {
						inline static std::string name;
						inline static std::string description;
					};
					inline static RichPresence richpresence;
				};
				inline static Other other;
			};
			struct Notifications {
				inline static std::string information;
				inline static std::string notification_disconnectwillbe1minutes;
				inline static std::string notification_connected;
			};
			struct Messages {
				inline static std::string disconnected;
			};
		};
		inline static Classes::Module module;
		inline static Classes::Notifications notifications;
		inline static Classes::Messages messages;

		static auto get() -> Language {
			Language data = Language();
			
			switch (language) {
			case Languages::en_US: {
				{
					{
						data.module.combat.teleportaura.name = _("Teleport Aura");
						data.module.combat.teleportaura.description = _("Automatically attacks entities from far away by teleporting");
					}
				}

				{
					{
						data.module.render.clickgui.name = _("Click Gui");
						data.module.render.clickgui.description = _("Draw a list of mods and their settings");
						data.module.render.clickgui.combat_category = _("Combat");
						data.module.render.clickgui.render_category = _("Render");
						data.module.render.clickgui.movement_category = _("Movement");
						data.module.render.clickgui.player_category = _("Player");
						data.module.render.clickgui.exploit_category = _("Exploit");
						data.module.render.clickgui.ghost_category = _("Ghost");
						data.module.render.clickgui.other_category = _("Other");
					}
					{
						data.module.render.hiteffects.name = _("Hit Effects");
						data.module.render.hiteffects.description = _("When you hit an entity, it produces an effect");

						data.module.render.hiteffects.mode = _("Mode");
						data.module.render.hiteffects.mode_1 = _("Balls");
						data.module.render.hiteffects.mode_2 = _("Blood");

						data.module.render.hiteffects.delay = _("Delay");
						data.module.render.hiteffects.removedelay = _("Remove Delay");
						data.module.render.hiteffects.roundness = _("Roundness");
						data.module.render.hiteffects.size = _("Size");
						data.module.render.hiteffects.amount = _("Amount");
						data.module.render.hiteffects.speed = _("Speed");
					}
					{
						data.module.render.killeffects.name = _("Kill Effects");
						data.module.render.killeffects.description = _("When you killed an entity, it produces an effect");

						data.module.render.killeffects.mode = _("Mode");
						data.module.render.killeffects.mode_1 = _("Balls");
						data.module.render.killeffects.mode_2 = _("Blood");

						data.module.render.killeffects.removedelay = _("Remove Delay");
						data.module.render.killeffects.roundness = _("Roundness");
						data.module.render.killeffects.size = _("Size");
						data.module.render.killeffects.amount = _("Amount");
						data.module.render.killeffects.speed = _("Speed");
					}
				}

				{
					{
						data.module.player.cheststealer.name = _("Chest Stealer");
						data.module.player.cheststealer.description = _("Steal all the items in the chest");
					}
					{
						data.module.player.inventorymanager.name = _("Inventory Manager");
						data.module.player.inventorymanager.description = _("Organize your inventory");
					}
					{
						data.module.player.inventorysync.name = _("Inventory Sync");
						data.module.player.inventorysync.description = _("Synchronizes your inventory with the server");
					}
				}

				{
					{
						data.module.ghost.wtap.name = _("WTap");
						data.module.ghost.wtap.description = _("Briefly releases W after attacking to increase knockback given");
					}
				}

				{
					{
						data.module.other.securityfeatures.name = _("Security Features");
						data.module.other.securityfeatures.description = _("Patches various exploits used by malicious servers");
						data.module.other.securityfeatures.patched_message_1 = _("Patched 1 Exploit");
					}
					{
						data.module.other.cheatdetector.name = _("Cheat Detector");
						data.module.other.cheatdetector.description = _("Detects other cheaters");
					}
					{
						data.module.other.autogg.name = _("Auto GG");
						data.module.other.autogg.description = _("Send GG when the game is over");
					}
					{
						data.module.other.richpresence.name = _("Rich Presence");
						data.module.other.richpresence.description = _("Displays a rich presence on Discord");
					}
				}

				data.notifications.information = _("Information");
				data.notifications.notification_disconnectwillbe1minutes = _("Disconnected (will be ejected in 1 minute)");
				data.notifications.notification_connected = _("Connected");
				data.messages.disconnected = _("Disconnected");
				break;
			}
			case Languages::es_PE: {
				{
					{
						data.module.combat.teleportaura.name = _("Aura de teletransporte");
						data.module.combat.teleportaura.description = _("Ataca automaticamente a entidades lejanas teletransportandose");
					}
				}

				{
					{
						data.module.render.clickgui.name = _("Haga clic en Gui");
						data.module.render.clickgui.description = _("Dibuja una lista de mods y sus ajustes");
						data.module.render.clickgui.combat_category = _("Combate");
						data.module.render.clickgui.render_category = _("Render");
						data.module.render.clickgui.movement_category = _("Movimiento");
						data.module.render.clickgui.player_category = _("Jugador");
						data.module.render.clickgui.exploit_category = _("Explote");
						data.module.render.clickgui.ghost_category = _("Fantasma");
						data.module.render.clickgui.other_category = _("Otros");
					}
					{
						data.module.render.hiteffects.name = _("Efectos de los golpes");
						data.module.render.hiteffects.description = _("Cuando golpeas una entidad, se produce un efecto");

						data.module.render.hiteffects.mode = _("Modo");
						data.module.render.hiteffects.mode_1 = _("Bolas");
						data.module.render.hiteffects.mode_2 = _("Sangre");

						data.module.render.hiteffects.delay = _("Retraso");
						data.module.render.hiteffects.removedelay = _("Eliminar Retraso");
						data.module.render.hiteffects.roundness = _("Redondez");
						data.module.render.hiteffects.size = _("Talla");
						data.module.render.hiteffects.amount = _("Importe");
						data.module.render.hiteffects.speed = _("Velocidad");
					}
					{
						data.module.render.killeffects.name = _("Efectos mortales");
						data.module.render.killeffects.description = _("Cuando mataste a una entidad, produce un efecto");

						data.module.render.killeffects.mode = _("Modo");
						data.module.render.killeffects.mode_1 = _("Bolas");
						data.module.render.killeffects.mode_2 = _("Sangre");

						data.module.render.killeffects.removedelay = _("Eliminar Retraso");
						data.module.render.killeffects.roundness = _("Redondez");
						data.module.render.killeffects.size = _("Talla");
						data.module.render.killeffects.amount = _("Importe");
						data.module.render.killeffects.speed = _("Velocidad");
					}
				}

				{
					{
						data.module.player.cheststealer.name = _("Robo de cofres");
						data.module.player.cheststealer.description = _("Roba todos los objetos del cofre");
					}
					{
						data.module.player.inventorymanager.name = _("Responsable de inventario");
						data.module.player.inventorymanager.description = _("Organice su inventario");
					}
					{
						data.module.player.inventorysync.name = _("Sincronizacion de inventarios");
						data.module.player.inventorysync.description = _("Sincroniza tu inventario con el servidor");
					}
				}

				{
					{
						data.module.ghost.wtap.name = _("WTap");
						data.module.ghost.wtap.description = _("Suelta brevemente W después de atacar para aumentar el knockback dado");
					}
				}

				{
					{
						data.module.other.securityfeatures.name = _("Elementos de seguridad");
						data.module.other.securityfeatures.description = _("Parchea varios exploits utilizados por servidores maliciosos");
						data.module.other.securityfeatures.patched_message_1 = _("Parcheado 1 Exploit");
					}
					{
						data.module.other.cheatdetector.name = _("Detector de trampas");
						data.module.other.cheatdetector.description = _("Detecta a otros tramposos");
					}
					{
						data.module.other.autogg.name = _("Auto GG");
						data.module.other.autogg.description = _("Enviar GG cuando el juego ha terminado");
					}
					{
						data.module.other.richpresence.name = _("Rica presencia");
						data.module.other.richpresence.description = _("Muestra una rica presencia en Discord");
					}
				}

				data.notifications.information = _("Informacion");
				data.notifications.notification_disconnectwillbe1minutes = _("Desconectado (se expulsara en 1 minuto)");
				data.notifications.notification_connected = _("Conectado");
				data.messages.disconnected = _("Desconectado");
				break;
			}
			}

			return data;
		}
	};
}
