package com.airlock.iam.admin.application.system;

import java.util.HashMap;
import java.util.Map;

public final class PageUrlMappings {
   private static final Map<String, AdminappPage> OLD_PAGE_NAMES = createOldPageNameMappings();
   private static final Map<AdminappPage, String> PAGE_URLS = createPageUrlMap();

   private PageUrlMappings() {
   }

   public static AdminappPage mapOldPageName(String oldPage) {
      return OLD_PAGE_NAMES.getOrDefault(oldPage, AdminappPage.UNDEFINED);
   }

   public static String getPageUrl(AdminappPage page) {
      return PAGE_URLS.get(page);
   }

   private static Map<String, AdminappPage> createOldPageNameMappings() {
      Map<String, AdminappPage> map = new HashMap<>();
      map.put("listUsers", AdminappPage.USER_LIST);
      map.put("listMaintenanceMessages", AdminappPage.MAINTENANCE_MESSAGE_LIST);
      map.put("logViewer", AdminappPage.LOGS);
      map.put("viewLog", AdminappPage.LOGS);
      map.put("license", AdminappPage.LICENSE);
      map.put("listAdmins", AdminappPage.ADMIN_LIST);
      map.put("listAdministrators", AdminappPage.ADMIN_LIST);
      map.put("manageToken", AdminappPage.TOKEN_LIST);
      map.put("manageTokens", AdminappPage.TOKEN_LIST);
      map.put("viewTechnicalClients", AdminappPage.TECH_CLIENT_LIST);
      map.put("editConfig", AdminappPage.OLD_CONFIG_EDITOR);
      map.put("accessServiceContainer", AdminappPage.SERVICE_CONTAINER);
      return map;
   }

   private static Map<AdminappPage, String> createPageUrlMap() {
      Map<AdminappPage, String> map = new HashMap<>();
      map.put(AdminappPage.USER_LIST, pageUrl("/users"));
      map.put(AdminappPage.USER_BULK_CHANGE, pageUrl("/users/bulk-change"));
      map.put(AdminappPage.ADMIN_LIST, pageUrl("/admins"));
      map.put(AdminappPage.TOKEN_LIST, pageUrl("/tokens"));
      map.put(AdminappPage.TECH_CLIENT_LIST, pageUrl("/tech-clients"));
      map.put(AdminappPage.MAINTENANCE_MESSAGE_LIST, pageUrl("/maintenance-messages"));
      map.put(AdminappPage.LOGS, pageUrl("/logs"));
      map.put(AdminappPage.LICENSE, pageUrl("/license"));
      map.put(AdminappPage.ADMIN_PASSWORD_CHANGE, pageUrl("/change-password"));
      map.put(AdminappPage.OLD_CONFIG_EDITOR, "/editConfig");
      map.put(AdminappPage.SERVICE_CONTAINER, "/accessServiceContainer");
      return map;
   }

   private static String pageUrl(String path) {
      return "/app/secure" + path;
   }
}
