/**
 * Utils for knowledge studio supporting access to internal layer properties needed for in-memory state serialization
 *
 * NOTE TO DEVS
 * MINIMIZE USE OF INTERNAL SDK ACCESS!
 * To the maximum extent possible, ArcGIS Knowledge Studio should use the same public interface as
 * PS/3rd part developers.
 *
 * @internal
 * @internal
 */
import type KnowledgeGraphLayer from "../../layers/KnowledgeGraphLayer.js";
import type LinkChartLayer from "../../layers/LinkChartLayer.js";
import type KnowledgeGraphSublayer from "../../layers/knowledgeGraph/KnowledgeGraphSublayer.js";
import type { InclusionModeDefinitionOptimizedGeometry } from "./generalSharedKgUtils.js";
import type { OriginName } from "../../core/accessorSupport/types.js";

/**
 * @param layer - The layer to get the inclusion definition from.
 * @internal
 * @since 4.32
 * @internal
 */
export function getInclusionDefinitionFromLayer(layer: KnowledgeGraphLayer | LinkChartLayer): InclusionModeDefinitionOptimizedGeometry | null | undefined;

/**
 * @param layer - The layer to get the inclusion definition from.
 * @internal
 * @since 4.32
 * @internal
 */
export function removeInclusionDefinitionFromLayer(layer: KnowledgeGraphLayer): void;

/**
 * @param layer - The layer to add the inclusion definition to.
 * @param inclusionDefinition - The inclusion definition to add to the layer.
 * @internal
 * @internal
 */
export function addInclusionDefinitionToLayer(layer: KnowledgeGraphLayer, inclusionDefinition: InclusionModeDefinitionOptimizedGeometry): void;

/**
 * @param layer - The layer to read the JSON onto itself
 * @param json
 * @param originName
 * @internal
 * @internal
 */
export function readKnowledgeLayerJSON(layer: KnowledgeGraphLayer | LinkChartLayer | KnowledgeGraphSublayer, json: any, originName: OriginName): void;

/**
 * @param sublayer - The sublayer to convert to JSON.
 * @internal
 * @internal
 */
export function kgSublayerToJSON(sublayer: KnowledgeGraphSublayer): any;

/**
 * @param sublayer - The sublayer to get the origin ID from.
 * @param propertyName - The property name to get the origin ID for.
 * @internal
 * @internal
 */
export function originIdOfPropertyOnSublayer(sublayer: KnowledgeGraphSublayer, propertyName: string): OriginId;

/**
 * @internal
 * @internal
 */
export type OriginId = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;

/**
 * @param sublayer - The sublayer to get the privileges from.
 * @internal
 * @internal
 */
export function getKgSublayerPrivileges(sublayer: KnowledgeGraphSublayer): {
    userHasEditingPrivileges: boolean;
    userHasFullEditingPrivileges: boolean;
    userHasUpdateItemPrivileges: boolean;
};