import {
	CompoundEntityRef,
	DEFAULT_NAMESPACE,
	Entity,
	GroupEntity,
	RELATION_PARENT_OF,
	stringifyEntityRef,
	UserEntity,
} from '@backstage/catalog-model';
import {
	CatalogApi,
	getEntityRelations,
} from '@backstage/plugin-catalog-react';

export const getMembersFromGroups = async (
	groups: CompoundEntityRef[],
	catalogApi: CatalogApi
) => {
	const membersList =
		groups.length === 0
			? { items: [] }
			: await catalogApi.getEntities({
					filter: {
						kind: 'User',
						'relations.memberof': groups.map((group) =>
							stringifyEntityRef({
								kind: 'group',
								namespace: group.namespace.toLocaleLowerCase('en-US'),
								name: group.name.toLocaleLowerCase('en-US'),
							})
						),
					},
			  });

	return membersList.items as UserEntity[];
};

export const getAllDesendantMembersForGroupEntity = async (
	groupEntity: GroupEntity,
	catalogApi: CatalogApi
) =>
	getMembersFromGroups(
		await getDescendantGroupsFromGroup(groupEntity, catalogApi),
		catalogApi
	);
