/*
 *  This file is part of Player Analytics (Plan).
 *
 *  Plan is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License v3 as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  Plan is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with Plan. If not, see <https://www.gnu.org/licenses/>.
 */
package com.djrapitops.plan.settings.locale.lang;

/**
 * Lang enum for all text included in the html files.
 *
 * @author AuroraLS3
 */
public enum HtmlLang implements Lang {

    TITLE_NETWORK("html.label.network", "Network"),
    // Sidebar
    SIDE_INFORMATION("html.label.information", "INFORMATION"), // Nav group title
    SIDE_NETWORK_OVERVIEW("html.label.networkOverview", "Network Overview"),
    SIDE_SERVERS("html.label.servers", "Servers"),
    SIDE_OVERVIEW("html.label.overview", "Overview"),
    SIDE_SESSIONS("html.label.sessions", "Sessions"),
    SIDE_PLAYERBASE("html.label.playerbase", "Playerbase"),
    SIDE_PLAYER_LIST("html.label.playerList", "Player List"),
    SIDE_GEOLOCATIONS("html.label.geolocations", "Geolocations"),
    SIDE_LINKS("html.label.links", "LINKS"),
    SIDE_PERFORMANCE("html.label.performance", "Performance"),
    SIDE_PLUGINS_OVERVIEW("html.label.pluginsOverview", "Plugins Overview"),
    SIDE_MANAGE("html.label.manage", "Manage"),
    SIDE_MANAGE_GROUPS("html.label.groupPermissions", "Manage Groups"),
    SIDE_MANAGE_GROUP_USERS("html.label.groupUsers", "Manage Group Users"),
    SIDE_MANAGE_USER_GROUPS("html.label.users", "Manage Users"),
    SIDE_ERRORS("html.label.errors", "Plan Error Logs"),
    SIDE_DOCS("html.label.docs", "Swagger Docs"),
    QUERY_MAKE("html.label.query", "Make a query"),
    UNIT_NO_DATA("generic.noData", "No Data"), // Generic
    GRAPH_NO_DATA("html.label.noDataToDisplay", "No Data to Display"),
    // Modals
    TITLE_THEME_SELECT("html.label.themeSelect", "Theme Select"),
    LINK_NIGHT_MODE("html.button.nightMode", "Night Mode"),
    TEXT_PLUGIN_INFORMATION("html.modal.info.text", "Information about the plugin"),
    TEXT_LICENSED_UNDER("html.modal.info.license", "Player Analytics is developed and licensed under"),
    LINK_WIKI("html.modal.info.wiki", "Plan Wiki, Tutorials & Documentation"),
    LINK_ISSUES("html.modal.info.bugs", "Report Issues"),
    LINK_DISCORD("html.modal.info.discord", "General Support on Discord"),
    AND_BUG_REPORTERS("html.modal.info.contributors.bugreporters", "& Bug reporters!"),
    TEXT_DEVELOPED_BY("html.modal.info.developer", "is developed by"),
    TEXT_CONTRIBUTORS_THANKS("html.modal.info.contributors.text", "In addition following <span class=\"col-plan\">awesome people</span> have contributed:"),
    TEXT_CONTRIBUTORS_CODE("html.modal.info.contributors.code", "code contributor"),
    TEXT_CONTRIBUTORS_LOCALE("html.modal.info.contributors.translator", "translator"),
    TEXT_CONTRIBUTORS_MONEY("html.modal.info.contributors.donate", "Extra special thanks to those who have monetarily supported the development."),
    TEXT_METRICS("html.modal.info.metrics", "bStats Metrics"),
    TITLE_VERSION("html.modal.version.title", "Version"),
    TITLE_IS_AVAILABLE("html.modal.version.available", "is Available"),
    TEXT_VERSION("html.modal.version.text", "A new version has been released and is now available for download."),
    TEXT_DEV_VERSION("html.modal.version.dev", "This version is a DEV release."),
    LINK_CHANGELOG("html.modal.version.changelog", "View Changelog"),
    LINK_DOWNLOAD("html.modal.version.download", "Download"),
    // Network overview tab
    TITLE_GRAPH_NETWORK_ONLINE_ACTIVITY("html.label.networkOnlineActivity", "Network Online Activity"),
    TITLE_GRAPH_DAY_BY_DAY("html.label.dayByDay", "Day by Day"),
    TITLE_GRAPH_HOUR_BY_HOUR("html.label.hourByHour", "Hour by Hour"),
    UNIT_THE_PLAYERS("html.unit.players", "Players"),
    TITLE_LAST_24_HOURS("html.label.last24hours", "Last 24 hours"),
    TITLE_LAST_7_DAYS("html.label.last7days", "Last 7 days"),
    TITLE_LAST_30_DAYS("html.label.last30days", "Last 30 days"),
    LABEL_UNIQUE_PLAYERS("html.label.uniquePlayers", "Unique Players"),
    LABEL_UNIQUE_PLAYERS_7_DAYS("html.label.uniquePlayers7days", "Unique Players (7 days)"),
    LABEL_NEW_PLAYERS("html.label.newPlayers", "New Players"),
    LABEL_NEW_PLAYERS_7_DAYS("html.label.newPlayers7days", "New Players (7 days)"),
    LABEL_REGULAR_PLAYERS("html.label.regularPlayers", "Regular Players"),
    LABEL_TOTAL_PLAYERS("html.label.totalPlayers", "Total Players"),
    TITLE_NETWORK_AS_NUMBERS("html.label.networkAsNumbers", "Network as Numbers"),
    LABEL_PLAYERS_ONLINE("html.label.playersOnline", "Players Online"),
    LABEL_PLAYERS_ONLINE_NOW("html.label.playersOnlineNow", "Players Online (Now)"),
    LABEL_TOTAL_PLAYTIME("html.label.totalPlaytime", "Total Playtime"),
    LABEL_PLAYTIME("html.label.playtime", "Playtime"),
    LABEL_ACTIVE_PLAYTIME("html.label.activePlaytime", "Active Playtime"),
    LABEL_LAST_PEAK("html.label.lastPeak", "Last Peak"),
    LABEL_BEST_PEAK("html.label.bestPeak", "Best Peak"),
    LABEL_AVG_PLAYTIME("html.label.averagePlaytime", "Average Playtime"),
    LABEL_AVG_SESSIONS("html.label.averageSessions", "Average Sessions"),
    LABEL_AVG_ACTIVE_PLAYTIME("html.label.averageActivePlaytime", "Average Active Playtime"),
    LABEL_AVG_AFK_TIME("html.label.averageAfkTime", "Average AFK Time"),
    LABEL_PER_PLAYER("html.label.perPlayer", "/ Player"),
    LABEL_AVG_SESSION_LENGTH("html.label.averageSessionLength", "Average Session Length"),
    TITLE_WEEK_COMPARISON("html.label.weekComparison", "Week Comparison"),
    TITLE_TRENDS("html.label.trends30days", "Trends for 30 days"),
    TITLE_TREND("html.label.trend", "Trend"),
    COMPARING_7_DAYS("html.label.comparing7days", "Comparing 7 days"),
    // Servers tab
    TITLE_ONLINE_ACTIVITY("html.label.onlineActivity", "Online Activity"),
    TITLE_30_DAYS("html.label.thirtyDays", "30 days"),
    TITLE_AS_NUMBERS("html.label.asNumbers", "as Numbers"),
    LABEL_AVG_TPS("html.label.averageTps", "Average TPS"),
    LABEL_AVG_TPS_7_DAYS("html.label.averageTps7days", "Average TPS (7 days)"),
    LABEL_AVG_PLAYERS("html.label.averagePlayers", "Average Players"),
    LABEL_CPU("html.label.cpu", "CPU"),
    LABEL_CPU_USAGE("html.label.cpuUsage", "CPU Usage"),
    LABEL_AVG_CPU("html.label.averageCpuUsage", "Average CPU Usage"),
    LABEL_RAM("html.label.ram", "RAM"),
    LABEL_RAM_USAGE("html.label.ramUsage", "RAM Usage"),
    LABEL_AVG_RAM("html.label.averageRamUsage", "Average RAM Usage"),
    LABEL_AVG_ENTITIES("html.label.averageEntities", "Average Entities"),
    LABEL_AVG_CHUNKS("html.label.averageChunks", "Average Chunks"),
    LABEL_LOW_TPS("html.label.lowTpsSpikes", "Low TPS Spikes"),
    LABEL_LOW_TPS_7_DAYS("html.label.lowTpsSpikes7days", "Low TPS Spikes (7 days)"),
    LABEL_DOWNTIME("html.label.downtime", "Downtime"),
    // Sessions tab #tab-sessions-overview
    TITLE_RECENT_SESSIONS("html.label.recentSessions", "Recent Sessions"),
    TITLE_PLAYER("html.label.player", "Player"),
    TITLE_SESSION_START("html.label.sessionStart", "Session Started"),
    TITLE_LENGTH("html.label.length", " Length"),
    TITLE_SERVER("html.label.server", "Server"), // Can cause issue with datatables.js
    TITLE_MOST_PLAYED_WORLD("html.label.mostPlayedWorld", "Most played World"),
    TEXT_CLICK_TO_EXPAND("html.text.clickToExpand", "Click to expand"),
    TEXT_CLICK_AND_DRAG("html.text.clickAndDrag", "Click and Drag for more"),
    TEXT_CLICK("html.text.click", "Click for more"),
    TITLE_SERVER_PLAYTIME_30("html.label.serverPlaytime30days", "Server Playtime for 30 days"),
    TITLE_INSIGHTS("html.label.insights30days", "Insights for 30 days"),
    LABEL_AFK_TIME("html.label.afkTime", "AFK Time"),
    LABEL_AFK("html.label.afk", "AFK"),
    // Playerbase overview tab #tab-playerbase-overview
    TITLE_PLAYERBASE_OVERVIEW("html.label.playerbaseOverview", "Playerbase Overview"),
    TITLE_PLAYERBASE_DEVELOPMENT("html.label.playerbaseDevelopment", "Playerbase development"),
    TITLE_CURRENT_PLAYERBASE("html.label.currentPlayerbase", "Current Playerbase"),
    TITLE_JOIN_ADDRESSES("html.label.joinAddresses", "Join Addresses"),
    TITLE_LATEST_JOIN_ADDRESSES("html.label.latestJoinAddresses", "Latest Join Addresses"),
    COMPARING_60_DAYS("html.text.comparing30daysAgo", "Comparing 30d ago to Now"),
    TITLE_30_DAYS_AGO("html.label.thirtyDaysAgo", "30 days ago"),
    TITLE_NOW("html.label.now", "Now"),
    LABEL_PER_REGULAR_PLAYER("html.label.perRegularPlayer", "/ Regular Player"),
    LABEL_NEW("html.label.new", "New"),
    LABEL_REGULAR("html.label.regular", "Regular"),
    LABEL_INACTIVE("html.label.inactive", "Inactive"),
    SIDE_TO_MAIN_PAGE("html.label.toMainPage", "to main page"),
    // Geolocations tab
    TITLE_CONNECTION_INFO("html.label.connectionInfo", "Connection Information"),
    TITLE_COUNTRY("html.label.country", "Country"),
    TITLE_AVG_PING("html.label.averagePing", "Average Ping"),
    TITLE_WORST_PING("html.label.worstPing", "Worst Ping"),
    TITLE_BEST_PING("html.label.bestPing", "Best Ping"),
    TEXT_NO_EXTENSION_DATA("html.text.noExtensionData", "No Extension Data"),
    // Server page
    LINK_BACK_NETWORK("html.label.networkPage", "Network page"),
    SIDE_PVP_PVE("html.label.pvpPve", "PvP & PvE"),
    LABEL_RETENTION("html.label.newPlayerRetention", "New Player Retention"),
    LABEL_RETENTION_GENERAL("html.label.playerRetention", "Player Retention"),
    DESCRIBE_RETENTION_PREDICTION("html.description.newPlayerRetention", "This value is a prediction based on previous players."),
    TITLE_SERVER_AS_NUMBERS("html.label.serverAsNumberse", "Server as Numbers"),
    TITLE_ONLINE_ACTIVITY_AS_NUMBERS("html.label.onlineActivityAsNumbers", "Online Activity as Numbers"),
    COMPARING_15_DAYS("html.text.comparing15days", "Comparing 15 days"),
    TITLE_GRAPH_PUNCHCARD("html.label.punchcard30days", "Punchcard for 30 Days"),
    LABEL_ONLINE_FIRST_JOIN("html.label.onlineOnFirstJoin", "Players online on first join"),
    LABEL_FIRST_SESSION_LENGTH_AVERAGE("html.label.firstSessionLength.average", "Average first session length"),
    LABEL_FIRST_SESSION_LENGTH_MEDIAN("html.label.firstSessionLength.median", "Median first session length"),
    LABEL_LONE_JOINS("html.label.loneJoins", "Lone joins"),
    LABEL_LONE_NEW_JOINS("html.label.loneNewbieJoins", "Lone newbie joins"),
    LABEL_MOST_ACTIVE_GAMEMODE("html.label.mostActiveGamemode", "Most Active Gamemode"),
    LABEL_SERVER_OCCUPIED("html.label.serverOccupied", "Server occupied"),
    TITLE_PVP_PVE_NUMBERS("html.label.pvpPveAsNumbers", "PvP & PvE as Numbers"),
    LABEL_1ST_WEAPON("html.label.deadliestWeapon", "Deadliest PvP Weapon"),
    LABEL_2ND_WEAPON("html.label.secondDeadliestWeapon", "2nd PvP Weapon"),
    LABEL_3RD_WEAPON("html.label.thirdDeadliestWeapon", "3rd PvP Weapon"),
    LABEL_AVG_KDR("html.label.averageKdr", "Average KDR"),
    LABEL_PLAYER_KILLS("html.label.playerKills", "Player Kills"),
    LABEL_PLAYER_KILLS_VICTIM_INDICATOR("html.label.playerKillsVictimIndicator", "Player was killed within 24h of first time they were seen (Time since registered: <>)."),
    LABEL_AVG_MOB_KDR("html.label.averageMobKdr", "Average Mob KDR"),
    LABEL_MOB_KILLS("html.label.mobKills", "Mob Kills"),
    LABEL_MOB_DEATHS("html.label.mobDeaths", "Mob Caused Deaths"),
    LABEL_DEATHS("html.label.deaths", "Deaths"),
    TITLE_RECENT_KILLS("html.label.recentKills", "Recent Kills"),
    TITLE_ALL("html.label.all", "All"),
    TITLE_TPS("html.label.tps", "TPS"),
    TITLE_CPU_RAM("html.label.cpuRam", "CPU & RAM"),
    TITLE_WORLD("html.label.world", "World Load"),
    TITLE_PING("html.label.ping", "Ping"),
    TITLE_DISK("html.label.disk", "Disk Space"),
    LABEL_AVG("html.label.average", "Average"),
    TITLE_PERFORMANCE_AS_NUMBERS("html.label.performanceAsNumbers", "Performance as Numbers"),
    LABEL_SERVER_DOWNTIME("html.label.serverDowntime", "Server Downtime"),
    LABEL_TOTAL_SERVER_DOWNTIME("html.label.totalServerDowntime", "Total Server Downtime"),
    LABEL_AVERAGE_SERVER_DOWNTIME("html.label.averageServerDowntime", "Average Downtime / Server"),
    LABEL_DURING_LOW_TPS("html.label.duringLowTps", "During Low TPS Spikes:"),
    TEXT_NO_LOW_TPS("html.text.noLowTps", "No low tps spikes"),
    // Player Page
    TITLE_SEEN_NICKNAMES("html.label.seenNicknames", "Seen Nicknames"),
    LABEL_LAST_SEEN("html.label.lastSeen", "Last Seen"),
    TITLE_LAST_CONNECTED("html.label.lastConnected", "Last Connected"),
    LABEL_PLAYER_DEATHS("html.label.playerDeaths", "Player Caused Deaths"),
    TITLE_PVP_KILLS("html.label.recentPvpKills", "Recent PvP Kills"),
    TITLE_PVP_DEATHS("html.label.recentPvpDeaths", "Recent PvP Deaths"),
    TITLE_SERVER_PLAYTIME("html.label.serverPlaytime", "Server Playtime"),
    LINK_BACK_SERVER("html.label.serverPage", "Server page"),
    SIDE_SERVERS_TITLE("html.label.serversTitle", "SERVERS"),
    // Were missing
    TITLE_SERVER_OVERVIEW("html.label.serverOverview", "Server Overview"),
    TITLE_ONLINE_ACTIVITY_OVERVIEW("html.label.playersOnlineOverview", "Online Activity Overview"),
    PER_DAY("html.label.perDay", "/ Day"),
    TITLE_WORLD_PLAYTIME("html.label.worldPlaytime", "World Playtime"),
    TITLE_PLAYER_OVERVIEW("html.label.playerOverview", "Player Overview"),
    LABEL_LONGEST_SESSION("html.label.longestSession", "Longest Session"),
    LABEL_REGISTERED("html.label.registered", "Registered"),
    TITLE_TITLE_PLAYER_PUNCHCARD("html.label.punchcard", "Punchcard"),
    TITLE_ALL_TIME("html.label.allTime", "All Time"),
    LABEL_NAME("html.label.name", "Name"),
    // React
    LABEL_TITLE_SESSION_CALENDAR("html.label.sessionCalendar", "Session Calendar"),
    LABEL_TITLE_SERVER_CALENDAR("html.label.serverCalendar", "Server Calendar"),
    LABEL_TITLE_NETWORK_CALENDAR("html.label.networkCalendar", "Network Calendar"),
    LABEL_LABEL_JOIN_ADDRESS("html.label.joinAddress", "Join Address"),
    LABEL_LABEL_SESSION_MEDIAN("html.label.medianSessionLength", "Median Session Length"),
    LABEL_LABEL_KDR("html.label.kdr", "KDR"),
    LABEL_TITLE_INSIGHTS("html.label.insights", "Insights"),
    // ----------------------------------
    // OLD
    // ----------------------------------
    NAV_PLUGINS("html.label.plugins", "Plugins"),
    PLAYERS_TEXT("html.label.players", "Players"),
    TOTAL_PLAYERS("html.label.totalPlayersOld", "Total Players"),
    UNIQUE_CALENDAR("html.calendar.unique", "Unique:"),
    NEW_CALENDAR("html.calendar.new", "New:"),
    SESSION("html.label.session", "Session"),
    KILLED("html.label.killed", "Killed"),
    LABEL_LOADED_ENTITIES("html.label.loadedEntities", "Loaded Entities"),
    LABEL_LOADED_CHUNKS("html.label.loadedChunks", "Loaded Chunks"),
    LABEL_ENTITIES("html.label.entities", "Entities"),
    LABEL_FREE_DISK_SPACE("html.label.diskSpace", "Free Disk Space"),
    ONLINE("html.value.online", " Online"),
    OFFLINE("html.value.offline", " Offline"),
    LABEL_TIMES_KICKED("html.label.timesKicked", "Times Kicked"),
    TOTAL_ACTIVE_TEXT("html.label.totalActive", "Total Active"),
    TOTAL_AFK("html.label.totalAfk", "Total AFK"),
    LABEL_SESSION_MEDIAN("html.label.sessionMedian", "Session Median"),
    LABEL_ACTIVITY_INDEX("html.label.activityIndex", "Activity Index"),
    INDEX_ACTIVE("html.label.active", "Active"),
    INDEX_VERY_ACTIVE("html.label.veryActive", "Very Active"),
    INDEX_REGULAR("html.label.indexRegular", "Regular"),
    INDEX_IRREGULAR("html.label.irregular", "Irregular"),
    INDEX_INACTIVE("html.label.indexInactive", "Inactive"),
    LABEL_FAVORITE_SERVER("html.label.favoriteServer", "Favorite Server"),
    LABEL_NICKNAME("html.label.nickname", "Nickname"),
    LOCAL_MACHINE("html.value.localMachine", "Local Machine"),
    TITLE_CALENDAR("html.label.calendar", " Calendar"),
    LABEL_OPERATOR("html.label.operator", "Operator"),
    LABEL_BANNED("html.label.banned", "Banned"),
    LABEL_MOB_KDR("html.label.mobKdr", "Mob KDR"),
    WITH("html.value.with", "<th>With"),
    NO_KILLS("html.value.noKills", "No Kills"),
    LABEL_MAX_FREE_DISK("html.label.maxFreeDisk", "Max Free Disk"),
    LABEL_MIN_FREE_DISK("html.label.minFreeDisk", "Min Free Disk"),
    LABEL_CURRENT_UPTIME("html.label.currentUptime", "Current Uptime"),
    LABEL_TOTAL("html.label.total", "Total"),
    LABEL_ALPHABETICAL("html.label.alphabetical", "Alphabetical"),
    LABEL_SORT_BY("html.label.sortBy", "Sort By"),
    LABEL_STACKED("html.label.stacked", "Stacked"),
    LABEL_PROJECTION("html.label.geoProjection.dropdown", "Select projection"),
    LABEL_PROJECTION_MILLER("html.label.geoProjection.miller", "Miller"),
    LABEL_PROJECTION_MERCATOR("html.label.geoProjection.mercator", "Mercator"),
    LABEL_PROJECTION_EQUAL_EARTH("html.label.geoProjection.equalEarth", "Equal Earth"),
    LABEL_PROJECTION_ORTOGRAPHIC("html.label.geoProjection.ortographic", "Ortographic"),
    LABEL_SERVER_SELECTOR("html.label.serverSelector", "Server selector"),
    LABEL_APPLY("html.label.apply", "Apply"),
    LABEL_POSSIBLY_OFFLINE("html.label.serverPossiblyOffline", "Possibly offline"),
    LABEL_PLUGINS_CURRENTLY_INSTALLED("html.label.currentlyInstalledPlugins", "Currently Installed Plugins"),
    LABEL_PLUGINS_HISTORY("html.label.pluginHistory", "Plugin History"),
    LABEL_PLUGINS_VERSION_HISTORY("html.label.pluginVersionHistory", "Plugin Version History"),
    LABEL_VERSION("html.label.version", "Version"),
    LABEL_MODIFIED("html.label.modified", "Modified"),
    LABEL_INSTALLED("html.label.installed", "Installed"),
    LABEL_UNINSTALLED("html.label.uninstalled", "Uninstalled"),

    LABEL_TABLE_VISIBLE_COLUMNS("html.label.table.visibleColumns", "Visible columns"),
    LABEL_TABLE_SHOW_N_OF_M("html.label.table.showNofM", "Showing {{n}} of {{m}} entries"),
    LABEL_TABLE_SHOW_PER_PAGE("html.label.table.showPerPage", "Show per page"),
    LABEL_EXPORT("html.label.export", "Export"),

    LOGIN_LOGIN("html.login.login", "Login"),
    LOGIN_LOGOUT("html.login.logout", "Logout"),
    LOGIN_USERNAME("html.login.username", "Username"),
    LOGIN_PASSWORD("html.login.password", "Password"),
    LOGIN_FORGOT_PASSWORD("html.login.forgotPassword", "Forgot Password?"),
    LOGIN_CREATE_ACCOUNT("html.login.register", "Create an Account!"),
    LOGIN_FORGOT_PASSWORD_INSTRUCTIONS_1("html.login.forgotPassword1", "Forgot password? Unregister and register again."),
    LOGIN_FORGOT_PASSWORD_INSTRUCTIONS_2("html.login.forgotPassword2", "Use the following command in game to remove your current user:"),
    LOGIN_FORGOT_PASSWORD_INSTRUCTIONS_3("html.login.forgotPassword3", "Or using console:"),
    LOGIN_FORGOT_PASSWORD_INSTRUCTIONS_4("html.login.forgotPassword4", "After using the command, "),
    LOGIN_FAILED("html.login.failed", "Login failed: "),
    REGISTER("html.register.register", "Register"),
    REGISTER_DISABLED("html.register.disabled", "Registering new users has been disabled in the config."),
    REGISTER_CREATE_USER("html.register.createNewUser", "Create a new user"),
    REGISTER_USERNAME_TIP("html.register.usernameTip", "Username can be up to 50 characters."),
    REGISTER_PASSWORD_TIP("html.register.passwordTip", "Password should be more than 8 characters, but there are no limitations."),
    REGISTER_HAVE_ACCOUNT("html.register.login", "Already have an account? Login!"),
    REGISTER_USERNAME_LENGTH("html.register.error.usernameLength", "Username can be up to 50 characters, yours is "),
    REGISTER_SPECIFY_USERNAME("html.register.error.noUsername", "You need to specify a Username"),
    REGISTER_SPECIFY_PASSWORD("html.register.error.noPassword", "You need to specify a Password"),
    REGISTER_COMPLETE("html.register.completion", "Complete Registration"),
    REGISTER_COMPLETE_INSTRUCTIONS_1("html.register.completion1", "You can now finish registering the user."),
    REGISTER_COMPLETE_INSTRUCTIONS_2("html.register.completion2", "Code expires in 15 minutes"),
    REGISTER_COMPLETE_INSTRUCTIONS_3("html.register.completion3", "Use the following command in game to finish registration:"),
    REGISTER_COMPLETE_INSTRUCTIONS_4("html.register.completion4", "Or using console:"),
    REGISTER_SUCCESS("html.register.success", "Registered a new user successfully! You can now login."),
    REGISTER_FAILED("html.register.error.failed", "Registration failed: "),
    REGISTER_CHECK_FAILED("html.register.error.checkFailed", "Checking registration status failed: "),

    QUERY_PERFORM_QUERY("html.query.performQuery", "Perform Query!"),
    QUERY_LOADING_FILTERS("html.query.filters.loading", "Loading filters.."),
    QUERY_ADD_FILTER("html.query.filters.add", "Add a filter.."),
    QUERY_TIME_TO("html.query.label.to", ">to</label>"),
    QUERY_TIME_FROM("html.query.label.from", ">from</label>"),
    QUERY_SHOW_VIEW("html.query.label.view", "Show a view"),
    QUERY("html.query.title.text", "Query<"),
    QUERY_MAKE_ANOTHER("html.query.label.makeAnother", "Make another query"),
    QUERY_SERVERS_ALL("html.query.label.servers.all", "using data of all servers"),
    QUERY_SERVERS_SINGLE("html.query.label.servers.single", "using data of 1 server"),
    QUERY_SERVERS_TWO("html.query.label.servers.two", "using data of 2 servers"),
    QUERY_SERVERS_MANY("html.query.label.servers.many", "using data of {number} servers"),
    QUERY_SHOW_FULL_QUERY("html.query.label.showFullQuery", "Show Full Query"),

    HELP_TEST_RESULT("html.label.help.testResult", "Test result"),
    HELP_TEST_IT_OUT("html.label.help.testPrompt", "Test it out:"),
    HELP_TIPS("html.label.help.tips", "Tips"),
    HELP_RETENTION("html.label.help.retentionBasis", "New player retention is calculated based on session data. If a registered player has played within latter half of the timespan, they are considered retained."),
    HELP_ACTIVITY_INDEX("html.label.help.activityIndexBasis", "Activity index is based on non-AFK playtime in the past 3 weeks (21 days). Each week is considered separately."),
    HELP_ACTIVITY_INDEX_THRESHOLD("html.label.help.threshold", "Threshold"),
    HELP_ACTIVITY_INDEX_WEEK("html.label.help.activityIndexWeek", "Week {}"),
    HELP_ACTIVITY_INDEX_THRESHOLD_UNIT("html.label.help.thresholdUnit", "hours / week"),
    HELP_ACTIVITY_INDEX_PLAYTIME_UNIT("html.label.help.playtimeUnit", "hours"),
    HELP_ACTIVITY_INDEX_EXAMPLE_1("html.label.help.activityIndexExample1", "If someone plays as much as threshold every week, they are given activity index ~3."),
    HELP_ACTIVITY_INDEX_EXAMPLE_2("html.label.help.activityIndexExample2", "Very active is ~2x the threshold (y ≥ 3.75)."),
    HELP_ACTIVITY_INDEX_EXAMPLE_3("html.label.help.activityIndexExample3", "The index approaches 5 indefinitely."),
    HELP_ACTIVITY_INDEX_VISUALIZATION("html.label.help.activityIndexVisual", "Here is a visualization of the curve where y = activity index, and x = playtime per week / threshold."),

    HELP_GROUPS_1("html.label.help.manage.groups.line-1", "This view allows you to modify web group permissions."),
    HELP_GROUPS_2("html.label.help.manage.groups.line-2", "User's web group is determined during <1>{{command}}</1> by checking if Player has <2>{{permission}}</2> permission."),
    HELP_GROUPS_3("html.label.help.manage.groups.line-3", "You can use <1>{{command}}</1> to change permission group after registering."),
    HELP_GROUPS_4("html.label.help.manage.groups.line-4", "<1>{{icon}}</1> If you ever accidentally delete all groups with <2>{{permission}}</2> permission just <3>{{command}}</3>."),
    HELP_GROUPS_5("html.label.help.manage.groups.line-5", "Permission inheritance"),
    HELP_GROUPS_6("html.label.help.manage.groups.line-6", "Permissions follow inheritance model, where higher level permission grants all lower ones, eg. <1>{{permission1}}</1> also gives <2>{{permission2}}</2>, etc."),
    HELP_GROUPS_7("html.label.help.manage.groups.line-7", "Access vs Page -permissions"),
    HELP_GROUPS_8("html.label.help.manage.groups.line-8", "You need to assign both access and page permissions for users."),
    HELP_GROUPS_9("html.label.help.manage.groups.line-9", "<1>{{permission1}}</1> permissions allow user make the request to specific address, eg. <2>{{permission2}}</2> allows request to /network."),
    HELP_GROUPS_10("html.label.help.manage.groups.line-10", "<1>{{permission}}</> permissions determine what parts of the page are visible. These permissions also limit requests to the related data endpoints."),
    HELP_GROUPS_11("html.label.help.manage.groups.line-11", "<1>{{permission1}}</1> permissions are not required for data: <2>{{permission2}}</2> allows request to /v1/network/overview even without <3>{{permission3}}</3>."),
    HELP_GROUPS_12("html.label.help.manage.groups.line-12", "Saving changes"),
    HELP_GROUPS_13("html.label.help.manage.groups.line-13", "When you add a group or delete a group that action is saved immediately after confirm (no undo)."),
    HELP_GROUPS_14("html.label.help.manage.groups.line-14", "When you modify permissions those changes need to be saved by pressing the Save-button"),
    HELP_GROUPS_15("html.label.help.manage.groups.line-15", "Documentation can be found from <1>{{link}}</1>"),

    HELP_GRAPH_ZOOM("html.label.help.graph.zoom", "You can Zoom in by click + dragging on the graph."),
    HELP_GRAPH_TITLE("html.label.help.graph.title", "Graph"),
    HELP_GRAPH_LABEL("html.label.help.graph.labels", "You can hide/show a group by clicking on the label at the bottom."),
    HELP_RETENTION_USING_GRAPH("html.label.help.usingTheGraph", "Using the Graph"),
    HELP_RETENTION_SELECT_OPTIONS("html.label.help.retention.options", "Select the options to analyze different aspects of Player Retention."),
    HELP_RETENTION_COMPARE_MONTHS("html.label.help.retention.compareMonths", "You can compare different months by changing the '<0>' option to '<1>'"),
    HELP_RETENTION_COMPARE_JOIN_ADDRESS("html.label.help.retention.compareJoinAddress", "Grouping by join address allows measuring advertising campaigns on different sites."),
    RETENTION_CALCULATED("html.label.help.retention.howIsItCalculated", "How it is calculated"),
    RETENTION_CALCULATED_FROM("html.label.help.retention.howIsItCalculatedData", "The graph is generated from player data:"),
    RETENTION_CALCULATION_STEP1("html.label.help.retention.calculationStep1", "First the data is filtered using '<>' option. Any players with 'registerDate' outside the time range are ignored."),
    RETENTION_CALCULATION_STEP2("html.label.help.retention.calculationStep2", "Then it is grouped into groups of players using '<0>' option, eg. With '<1>': All players who registered in January 2023, February 2023, etc"),
    RETENTION_CALCULATION_STEP3("html.label.help.retention.calculationStep3", "Then the '<0>' and '<1>' options select which visualization to render."),
    RETENTION_CALCULATION_STEP4("html.label.help.retention.calculationStep4", "'<>' controls how many points the graph has, eg. 'Days' has one point per day."),
    RETENTION_CALCULATION_STEP5("html.label.help.retention.calculationStep5", "On each calculated point all players are checked for the condition."),
    RETENTION_CALCULATION_STEP6("html.label.help.retention.calculationStep6", "Select X Axis below to see conditions."),
    RETENTION_CALCULATION_STEP_TIME("html.label.help.retention.calculationStepTime", "This visualization tells how long people keep coming back to play on the server after they join the first time. The visualization uses timeDifference. If x < timeDifference, the player is visible on the graph."),
    RETENTION_CALCULATION_STEP_PLAYTIME("html.label.help.retention.calculationStepPlaytime", "This visualization tells how long the gameplay loop keeps players engaged on your server. The visualization uses playtime. If x < playtime, the player is visible on the graph."),
    RETENTION_CALCULATION_STEP_DATE("html.label.help.retention.calculationStepDate", "This visualization shows the different groups of players that are still playing on your server. The visualization uses lastSeen date. If x < lastSeenDate, the player is visible on the graph."),
    RETENTION_CALCULATION_STEP_DELTAS("html.label.help.retention.calculationStepDeltas", "This visualization is most effective using Player Count as the Y Axis. The visualization shows net gain of players (How many players joined minus players who stopped playing). The visualization uses both registered and lastSeen dates. If registerDate < x < lastSeenDate, the player is visible on the graph."),
    RETENTION_EXAMPLE("html.label.help.examples", "Examples"),
    RETENTION_EXAMPLE_PLAYTIME("html.label.help.retention.examples.playtime", "Playtime tells how long the gameplay loop keeps players engaged on your server."),
    RETENTION_EXAMPLE_DELTAS("html.label.help.retention.examples.deltas", "<> shows net gain of players."),
    RETENTION_EXAMPLE_PATTERN("html.label.help.retention.examples.pattern", "A general pattern emerges when all players start leaving the server at the same time"),
    RETENTION_EXAMPLE_PLATEAU("html.label.help.retention.examples.plateau", "Comparing player gain of different months. Plateaus suggest there were players Plan doesn't know about. In this example Plan was installed in January 2022."),
    RETENTION_EXAMPLE_AD_CAMPAIGN("html.label.help.retention.examples.adCampaign", "Comparing player gain of different ad campaigns using different Join Addresses (anonymized)"),
    RETENTION_EXAMPLE_STACK("html.label.help.retention.examples.stack", "Cumulative player gain can be checked with stacked player count as Y axis"),

    RETENTION_TIME_STEP("html.label.retention.timeStep", "Time step"),
    RETENTION_PLAYERS_WHO_REGISTERED("html.label.retention.playersRegisteredInTime", "Players who registered"),
    RETENTION_GROUP_REGISTER_BY("html.label.retention.groupByTime", "Group registered by"),
    RETENTION_GROUP_REGISTER_BY_NONE("html.label.retention.groupByNone", "No grouping"),
    RETENTION_PLAYER_PERCENTAGE("html.label.retention.retainedPlayersPercentage", "Retained Players %"),
    RETENTION_LAST_7_DAYS("html.label.retention.inLast7d", "in the last 7 days"),
    RETENTION_LAST_30_DAYS("html.label.retention.inLast30d", "in the last 30 days"),
    RETENTION_LAST_90_DAYS("html.label.retention.inLast90d", "in the last 3 months"),
    RETENTION_LAST_180_DAYS("html.label.retention.inLast180d", "in the last 6 months"),
    RETENTION_LAST_365_DAYS("html.label.retention.inLast365d", "in the last 12 months"),
    RETENTION_LAST_730_DAYS("html.label.retention.inLast730d", "in the last 24 months"),
    RETENTION_ANY_TIME("html.label.retention.inAnytime", "any time"),
    TIME_SINCE_REGISTERED("html.label.retention.timeSinceRegistered", "Time since register date"),
    DATE("html.label.time.date", "Date"),
    DAY("html.label.time.day", "Day"),
    WEEK("html.label.time.week", "Week"),
    MONTH("html.label.time.month", "Month"),
    YEAR("html.label.time.year", "Year"),
    HOURS("html.label.time.hours", "Hours"),
    DAYS("html.label.time.days", "Days"),
    WEEKS("html.label.time.weeks", "Weeks"),
    MONTHS("html.label.time.months", "Months"),
    X_AXIS("html.label.xAxis", "X Axis"),
    Y_AXIS("html.label.yAxis", "Y Axis"),
    PERCENTAGE("html.label.unit.percentage", "Percentage"),
    PLAYER_COUNT("html.label.unit.playerCount", "Player Count"),
    MANAGE_GROUP_HEADER("html.label.managePage.groupHeader", "Manage Group Permissions"),
    MANAGE_ADD_GROUP("html.label.managePage.addGroup.header", "Add group"),
    MANAGE_ADD_GROUP_NAME("html.label.managePage.addGroup.name", "Name of the group"),
    MANAGE_ADD_GROUP_NAME_INVALID("html.label.managePage.addGroup.invalidName", "Group name can be 100 characters maximum."),
    MANAGE_GROUP_PERMISSION_LIST("html.label.managePage.groupPermissions", "Permissions of {{groupName}}"),
    MANAGE_SAVE_CHANGES("html.label.managePage.changes.save", "Save"),
    MANAGE_DISCARD_CHANGES("html.label.managePage.changes.discard", "Discard Changes"),
    MANAGE_UNSAVED_CHANGES("html.label.managePage.changes.unsaved", "Unsaved changes"),
    MANAGE_DELETE_GROUP_HEADER("html.label.managePage.deleteGroup.header", "Delete '{{groupName}}'"),
    MANAGE_DELETE_GROUP_CONFIRM("html.label.managePage.deleteGroup.confirm", "Confirm & Delete {{groupName}}"),
    MANAGE_DELETE_GROUP_MOVE_TO("html.label.managePage.deleteGroup.moveToSelect", "Move remaining users to group"),
    MANAGE_DELETE_CONFIRM_DESCRIPTION("html.label.managePage.deleteGroup.confirmDescription", "This will move all users of '{{groupName}}' to group '{{moveTo}}'. There is no undo!"),
    MANAGE_ALERT_GROUP_DELETE_FAIL("html.label.managePage.alert.groupDeleteFail", "Failed to delete group: {{error}}"),
    MANAGE_ALERT_GROUP_DELETE_SUCCESS("html.label.managePage.alert.groupDeleteSuccess", "Deleted group '{{groupName}}'"),
    MANAGE_ALERT_GROUP_ADD_FAIL("html.label.managePage.alert.groupAddFail", "Failed to add group: {{error}}"),
    MANAGE_ALERT_GROUP_ADD_SUCCESS("html.label.managePage.alert.groupAddSuccess", "Added group '{{groupName}}'"),
    MANAGE_ALERT_SAVE_FAIL("html.label.managePage.alert.saveFail", "Failed to save changes: {{error}}"),
    MANAGE_ALERT_SAVE_SUCCESS("html.label.managePage.alert.saveSuccess", "Changes saved successfully!"),

    INFO_NO_UPTIME("html.description.noUptimeCalculation", "Server is offline, or has never restarted with Plan installed."),
    WARNING_NO_GAME_SERVERS("html.description.noGameServers", "Some data requires Plan to be installed on game servers."),
    WARNING_PERFORMANCE_NO_GAME_SERVERS("html.description.performanceNoGameServers", "TPS, Entity or Chunk data is not gathered from proxy servers since they don't have game tick loop."),
    WARNING_NO_GEOLOCATIONS("html.description.noGeolocations", "Geolocation gathering needs to be enabled in the config (Accept GeoLite2 EULA)."),
    WARNING_NO_SPONGE_CHUNKS("html.description.noSpongeChunks", "Chunks unavailable on Sponge"),
    WARNING_NO_DATA_24H("html.description.noData24h", "Server has not sent data for over 24 hours."),
    WARNING_NO_DATA_7D("html.description.noData7d", "Server has not sent data for over 7 days."),
    WARNING_NO_DATA_30D("html.description.noData30d", "Server has not sent data for over 30 days."),
    EXPORTED_TITLE("html.label.exported", "Data export time");

    private final String key;
    private final String defaultValue;

    HtmlLang(String key, String defaultValue) {
        this.key = key;
        this.defaultValue = defaultValue;
    }

    @Override
    public String getIdentifier() {
        return "HTML - " + name();
    }

    @Override
    public String getKey() {
        return key;
    }

    @Override
    public String getDefault() {
        return defaultValue;
    }

}