import { Item, PlaceholderItem, ImageItem } from "@aurigma/design-atoms-model/Product/Items";
import { Surface, Product, SurfaceContainer, PrintArea } from "@aurigma/design-atoms-model/Product";
import { IProductThemeConfig } from "@aurigma/design-atoms-model/Product/Interfaces";
import { IAddEventArgs, IRemoveEventArgs, IMoveEventArgs } from "@aurigma/design-atoms-model/ICollectionChangeEventArgs";
import { RectangleF, PointF } from "@aurigma/design-atoms-model/Math";
import { RgbColor } from "@aurigma/design-atoms-model/Colors";
import { ItemHandler, PlaceholderItemHandler, BaseRectangleItemHandler } from "../ItemHandlers";
import { IDpiChangedEventArgs } from "./ViolationService/Violations/ImageQualityViolation";
import * as TextWhizz from "@aurigma/text-whizz/TextWhizzJS";
import { IContextMenuParams } from "../Input/InputManager/IInputManager";
import { IInteractiveZonesStateChangedEventArgs } from "../Viewer/Interfaces/IInteractiveZonesHandler";
export interface IEventManager {
    addItemPropertyChanged(listener: (sender: Item, propertyName: string) => void): any;
    removeItemPropertyChanged(listener: (sender: Item, propertyName: string) => void): any;
    addItemChanged(listener: (item: Item) => void): any;
    removeItemChanged(listener: (item: Item) => void): any;
    addItemChanging(listener: (sender: Item) => void): any;
    removeItemChanging(listener: (sender: Item) => void): any;
    addSurfaceChanged(listener: (surface: Surface) => void): any;
    removeSurfaceChanged(listener: (surface: Surface) => void): any;
    addItemAdded(listener: (args: IAddEventArgs<Item>) => void): any;
    removeItemAdded(listener: (args: IAddEventArgs<Item>) => void): any;
    addItemRemoved(listener: (args: IRemoveEventArgs<Item>) => void): any;
    removeItemRemoved(listener: (args: IRemoveEventArgs<Item>) => void): any;
    addItemMoved(listener: (args: IMoveEventArgs) => void): any;
    removeItemMoved(listener: (args: IMoveEventArgs) => void): any;
    addImageContentChanged(listener: (item: PlaceholderItem | ImageItem) => void): any;
    removeImageContentChanged(listener: (item: PlaceholderItem | ImageItem) => void): any;
    addSnapshotLoadedEvent(listener: (snapshot: Product | Surface) => void): any;
    removeSnapshotLoadedEvent(listener: (snapshot: Product | Surface) => void): any;
    addBeforeSnapshotLoad(listener: (snapshot: Product | Surface) => void): any;
    removeBeforeSnapshotLoad(listener: (snapshot: Product | Surface) => void): any;
    addSurfaceCollectionChanged(listener: () => void): any;
    removeSurfaceCollectionChanged(listener: () => void): any;
    addLayerCollectionChanged(listener: () => void): any;
    removeLayerCollectionChanged(listener: () => void): any;
    addIItemHandelrCollectionChanged(listener: () => void): any;
    removeItemHandlerCollectionChanged(listener: () => void): any;
    addPrintAreaCollectionChanged(listener: () => void): any;
    removePrintAreaCollectionChanged(listener: () => void): any;
    addContainerCollectionChanged(listener: () => void): any;
    removeContainerCollectionChanged(listener: () => void): any;
    addItemCollectionChanged(listener: () => void): any;
    removeItemCollectionChanged(listener: () => void): any;
    addUnderMockupContainerCollectionChanged(listener: () => void): any;
    removeUnderMockupContainerCollectionChanged(listener: () => void): any;
    addOverMockupContainerCollectionChanged(listener: () => void): any;
    removeOverMockupContainerCollectionChanged(listener: () => void): any;
    addPreviewMockupContainerCollectionChanged(listener: () => void): any;
    removePreviewMockupContainerCollectionChanged(listener: () => void): any;
    addDeleteToolbarButtonClick(listener: (item: Item) => void): any;
    removeDeleteToolbarButtonClick(listener: (item: Item) => void): any;
    addHandleToolbarButtonClick(listener: (item: Item) => void): any;
    removeHandleToolbarButtonClick(listener: (item: Item) => void): any;
    addSelectToolbarButtonClick(listener: (item: Item) => void): any;
    removeSelectToolbarButtonClick(listener: (item: Item) => void): any;
    addEditToolbarButtonClick(listener: (item: Item) => void): any;
    removeEditToolbarButtonClick(listener: (item: Item) => void): any;
    addSelectButtonClick(listener: (item: PlaceholderItem) => void): any;
    removeSelectButtonClick(listener: (item: PlaceholderItem) => void): any;
    addViolationWarningButtonClick(listener: (item: Item) => void): any;
    removeViolationWarningButtonClick(listener: (item: Item) => void): any;
    addDoubleClick(listener: (item: Item) => void): any;
    removeDoubleClick(listener: (item: Item) => void): any;
    addShapePathLoaded(listener: () => void): any;
    removeShapePathLoaded(listener: () => void): any;
    addCurrentItemChanged(listener: (item: Item) => void): any;
    removeCurrentItemChanged(listener: (item: Item) => void): any;
    addSelectedItemChanged(listener: (items: Item[]) => void): any;
    removeSelectedItemChanged(listener: (items: Item[]) => void): any;
    addDragNDropDone(listener: () => void): any;
    removeDragNDropDone(listener: () => void): any;
    addDragNDropStarting(listener: () => void): any;
    removeDragNDropStarting(listener: () => void): any;
    addDragNDropPerformed(listener: () => void): any;
    removeDragNDropPerformed(listener: () => void): any;
    addReady(listener: () => void): any;
    removeReady(listener: () => void): any;
    addWorkspaceSizeChanged(listener: () => void): any;
    removeWorkspaceSizeChanged(listener: () => void): any;
    addProductThemeChanged(listener: (theme: IProductThemeConfig) => void): any;
    removeProductThemeChanged(listener: (theme: IProductThemeConfig) => void): any;
    addUserEditContainerChanged(listener: (container: SurfaceContainer) => void): any;
    removeUserEditContainerChanged(listener: (container: SurfaceContainer) => void): any;
    addcreateInputHandlerFinished(listener: (eventArgs: PointF | RectangleF) => void): any;
    removecreateInputHandlerFinished(listener: (eventArgs: PointF | RectangleF) => void): any;
    addPrintAreaPropertyChanged(listener: (sender: PrintArea, propertyName: string) => void): any;
    removePrintAreaPropertyChanged(listener: (sender: PrintArea, propertyName: string) => void): any;
    addMouseSelectPixelFinished(listener: (eventArgs: RgbColor) => void): any;
    removeMouseSelectPixelFinished(listener: (eventArgs: RgbColor) => void): any;
    addBeforeReplaceItemHandlerEvent(listener: (eventArgs: ItemHandler) => void): any;
    removeBeforeReplaceItemHandlerEvent(listener: (eventArgs: ItemHandler) => void): any;
    addAfterReplaceItemHandlerEvent(listener: (eventArgs: ItemHandler) => void): any;
    removeAfterReplaceItemHandlerEvent(listener: (eventArgs: ItemHandler) => void): any;
    addEnteredEditMode(listener: (item: Item) => void): any;
    removeEnteredEditMode(listener: (item: Item) => void): any;
    addExitedEditMode(listener: (item: Item) => void): any;
    removeExitedEditMode(listener: (item: Item) => void): any;
    addTextWhizzReady(listener: (textWhizz: typeof TextWhizz) => void): any;
    removeTextWhizzReady(listener: (textWhizz: typeof TextWhizz) => void): any;
    addImageDpiChanged(listener: (value: IDpiChangedEventArgs) => void): any;
    removeImageDpiChanged(listener: (value: IDpiChangedEventArgs) => void): any;
    addIsEditingChanged(listener: (ph: PlaceholderItemHandler) => void): any;
    removeIsEditingChanged(listener: (ph: PlaceholderItemHandler) => void): any;
    addOnContextMenu(listener: (value: IContextMenuParams) => void): any;
    removeOnContextMenu(listener: (value: IContextMenuParams) => void): any;
    addItemHandlerHover(listener: (h: BaseRectangleItemHandler[]) => void): any;
    removeItemHandlerHover(listener: (h: BaseRectangleItemHandler[]) => void): any;
    addDndStarted(listener: (h: PlaceholderItem) => void): any;
    removeDndStarted(listener: (h: PlaceholderItem) => void): any;
    addDndFinished(listener: (h: PlaceholderItem) => void): any;
    removeDndFinished(listener: (h: PlaceholderItem) => void): any;
    addInteractiveContainersChanged(listener: (h: SurfaceContainer[]) => void): any;
    removeInteractiveContainersChanged(listener: (h: SurfaceContainer[]) => void): any;
    addMaskedContainersChanged(listener: (h: SurfaceContainer[]) => void): any;
    removeMaskedContainersChanged(listener: (h: SurfaceContainer[]) => void): any;
    addInteractiveZonesChanged(listener: (e: IInteractiveZonesStateChangedEventArgs) => void): any;
    removeInteractiveZonesChanged(listener: (e: IInteractiveZonesStateChangedEventArgs) => void): any;
}
