import { useFormContext } from "react-hook-form";
import { useTranslation } from "react-i18next";
import { TextControl } from "@keycloakify/keycloak-admin-ui/ui-shared";

import { FixedButtonsGroup } from "@keycloakify/keycloak-admin-ui/components/form/FixedButtonGroup";
import { FormAccess } from "@keycloakify/keycloak-admin-ui/components/form/FormAccess";
import { useAccess } from "@keycloakify/keycloak-admin-ui/context/access/Access";
import { FormFields } from "@keycloakify/keycloak-admin-ui/clients/ClientDetails";
import type { ClientSettingsProps } from "@keycloakify/keycloak-admin-ui/clients/ClientSettings";
import { LoginSettings } from "@keycloakify/keycloak-admin-ui/clients/add/LoginSettings";

export const AccessSettings = ({
  client,
  save,
  reset,
}: ClientSettingsProps) => {
  const { t } = useTranslation();
  const { watch } = useFormContext<FormFields>();

  const { hasAccess } = useAccess();
  const isManager = hasAccess("manage-clients") || client.access?.configure;

  const protocol = watch("protocol");

  return (
    <FormAccess
      isHorizontal
      fineGrainedAccess={client.access?.configure}
      role="manage-clients"
    >
      {!client.bearerOnly && <LoginSettings protocol={protocol} />}
      {protocol !== "saml" && (
        <TextControl
          type="url"
          name="adminUrl"
          label={t("adminURL")}
          labelIcon={t("adminURLHelp")}
        />
      )}
      {client.bearerOnly && (
        <FixedButtonsGroup
          name="settings"
          save={save}
          reset={reset}
          isDisabled={isManager}
        />
      )}
    </FormAccess>
  );
};
