import React from 'react';
import { Practitioner } from 'fhir/r4';
import { useAuthServiceContext, usePractitionerServiceContext, useStaffPermissionServiceContext } from '../../../../../services';
import EditPractitionerProfile from '../../../ProfilePage/EditProfilePage/EditPractitionerProfile/EditPractitionerProfile.tsx';
import { DismissibleAlert } from '../../../../../components/ui/dismissible-alert';
import { getOrganizationSetupMissingItems, isOrganizationSetupComplete } from '../../../../../utils/organizationSetup';
import { STAFF_WORKSPACES, getPractitionerRoleWorkspaces } from '../../../../../utils/staffRoleCatalog.ts';
const UserEditPractitionerProfilePage: React.FC = () => {
const { currentUser, getCognitoGroup, USER_ROLES, wpOrganization } = useAuthServiceContext();
const { activeWorkspace } = useStaffPermissionServiceContext();
const { practitionerState } = usePractitionerServiceContext();
// Access is governed by the route guard (RequireStaffPermission section="staff" manage) - a delegated
// `staff:manage` workspace can edit staff profiles; authority tabs remain admin-only.
// Deactivation guardrails: a manager may deactivate staff, but not themselves, and a non-admin manager
// may not deactivate an admin (mirrors the Admin-workspace grant guardrail). Deactivation flips this org's
// PractitionerRole.active to false; the token pipeline then revokes staff access here only.
const targetRoles = practitionerState?.roles ?? [];
const isSelf = currentUser?.fhir?.id === practitionerState?.practitioner.id;
const isAdminActor = activeWorkspace === USER_ROLES.ADMIN;
const targetIsAdmin = targetRoles.some((role) =>
getPractitionerRoleWorkspaces(role, getCognitoGroup(role)).includes(STAFF_WORKSPACES.ADMIN),
);
const allowDeactivation = !isSelf && (isAdminActor || !targetIsAdmin);
const organizationSetupMissingItems = getOrganizationSetupMissingItems(wpOrganization.current);
const organizationSetupComplete = isOrganizationSetupComplete(wpOrganization.current);
if (!organizationSetupComplete) {
return (
Complete primary organization information before editing staff profiles. Missing: {organizationSetupMissingItems.join(', ')}.
);
}
return (
practitionerState &&
);
};
export default UserEditPractitionerProfilePage;