import { vertexvis } from '@vertexvis/frame-streaming-protos';
import { UUID } from '@vertexvis/utils';
import { ColorMaterial } from './colorMaterial';
export type RepresentationId = UUID.UUID | 'empty' | 'entire-part';
interface ShowItemOperation {
    type: 'show';
}
interface HideItemOperation {
    type: 'hide';
}
interface SelectItemOperation {
    type: 'select';
}
interface DeselectItemOperation {
    type: 'deselect';
}
interface ClearItemOperation {
    type: 'clear-override';
}
export interface ChangeMaterialOperation {
    type: 'change-material';
    material: ColorMaterial;
}
export interface TransformOperation {
    type: 'change-transform';
    transform: vertexvis.protobuf.core.IMatrix4x4f;
}
export interface ClearTransformOperation {
    type: 'clear-transform';
    cascade?: boolean;
}
export interface ChangePhantomOperation {
    type: 'change-phantom';
    phantomState?: boolean;
}
interface ClearPhantomOperation {
    type: 'clear-phantom';
}
export interface ChangeEndItemOperation {
    type: 'change-end-item';
    endItemState?: boolean;
}
interface ClearEndItemOperation {
    type: 'clear-end-item';
}
interface ViewRenditionById {
    type: 'view-rendition-by-id';
    id: UUID.UUID;
}
interface ViewRenditionBySuppliedId {
    type: 'view-rendition-by-supplied-id';
    suppliedId: string;
}
interface ViewDefaultRendition {
    type: 'view-default-rendition';
}
interface ClearRendition {
    type: 'clear-rendition';
}
interface ViewRepresentation {
    type: 'view-representation';
    id: RepresentationId;
}
interface ClearRepresentation {
    type: 'clear-representation';
}
export type ItemOperation = ShowItemOperation | HideItemOperation | SelectItemOperation | DeselectItemOperation | ChangeMaterialOperation | ClearItemOperation | TransformOperation | ClearTransformOperation | ChangePhantomOperation | ClearPhantomOperation | ChangeEndItemOperation | ClearEndItemOperation | ViewRenditionById | ViewRenditionBySuppliedId | ViewDefaultRendition | ClearRendition | ViewRepresentation | ClearRepresentation;
export interface SceneItemOperations<T> {
    materialOverride(color: ColorMaterial): T;
    show(): T;
    hide(): T;
    select(color: ColorMaterial): T;
    deselect(): T;
    clearMaterialOverrides(): T;
    clearTransforms(): T;
    setPhantom(phantomState?: boolean): T;
    clearPhantom(): T;
    setEndItem(endItemState?: boolean): T;
    clearEndItem(): T;
    viewRenditionById(id: UUID.UUID): T;
    viewRenditionBySuppliedId(id: string): T;
    viewDefaultRendition(): T;
    clearRendition(): T;
    viewRepresentation(id: RepresentationId): T;
    clearRepresentation(): T;
}
/**
 * A class to handle the building of operations on scene items for a scene.
 */
export declare class ItemOperationBuilder implements SceneItemOperations<ItemOperationBuilder> {
    private operations;
    constructor(operations?: ItemOperation[]);
    /**
     * Constructs the scene operations and returns a definition describing each
     * operation.
     */
    build(): ItemOperation[];
    materialOverride(material: ColorMaterial): ItemOperationBuilder;
    show(): ItemOperationBuilder;
    hide(): ItemOperationBuilder;
    select(): ItemOperationBuilder;
    deselect(): ItemOperationBuilder;
    clearMaterialOverrides(): ItemOperationBuilder;
    transform(matrix: vertexvis.protobuf.core.IMatrix4x4f): ItemOperationBuilder;
    clearTransforms(cascade?: boolean): ItemOperationBuilder;
    setPhantom(phantomState?: boolean): ItemOperationBuilder;
    clearPhantom(): ItemOperationBuilder;
    setEndItem(endItemState?: boolean): ItemOperationBuilder;
    clearEndItem(): ItemOperationBuilder;
    viewRenditionById(id: UUID.UUID): ItemOperationBuilder;
    viewRenditionBySuppliedId(suppliedId: string): ItemOperationBuilder;
    viewDefaultRendition(): ItemOperationBuilder;
    clearRendition(): ItemOperationBuilder;
    viewRepresentation(id: RepresentationId): ItemOperationBuilder;
    clearRepresentation(): ItemOperationBuilder;
}
export type PmiAnnotationOperation = ShowItemOperation | HideItemOperation | SelectItemOperation | DeselectItemOperation;
export interface PmiAnnotationOperations<T> {
    show(): T;
    hide(): T;
    select(color: ColorMaterial): T;
    deselect(): T;
}
/**
 * A class to handle the building of operations on PMI annotations for a scene.
 */
export declare class PmiAnnotationOperationBuilder implements PmiAnnotationOperations<PmiAnnotationOperationBuilder> {
    private operations;
    constructor(operations?: PmiAnnotationOperation[]);
    /**
     * Constructs the scene PMI annotation operations and returns a definition describing each
     * operation.
     */
    build(): PmiAnnotationOperation[];
    show(): PmiAnnotationOperationBuilder;
    hide(): PmiAnnotationOperationBuilder;
    select(): PmiAnnotationOperationBuilder;
    deselect(): PmiAnnotationOperationBuilder;
}
export {};
