import { lazy } from "react";
import type { Path } from "react-router-dom";
import { generateEncodedPath } from "@keycloakify/keycloak-admin-ui/utils/generateEncodedPath";
import type { AppRouteObject } from "@keycloakify/keycloak-admin-ui/routes";

export type ProviderType =
  | "aes-generated"
  | "ecdsa-generated"
  | "hmac-generated"
  | "java-keystore"
  | "rsa"
  | "rsa-enc"
  | "rsa-enc-generated"
  | "rsa-generated";

export type KeyProviderParams = {
  id: string;
  providerType: ProviderType;
  realm: string;
};

const KeyProviderForm = lazy(
  () => import("@keycloakify/keycloak-admin-ui/realm-settings/keys/key-providers/KeyProviderForm"),
);

export const KeyProviderFormRoute: AppRouteObject = {
  path: "/:realm/realm-settings/keys/providers/:id/:providerType/settings",
  element: <KeyProviderForm />,
  breadcrumb: (t) => t("editProvider"),
  handle: {
    access: "view-realm",
  },
};

export const toKeyProvider = (params: KeyProviderParams): Partial<Path> => ({
  pathname: generateEncodedPath(KeyProviderFormRoute.path, params),
});
