import { AppObject, AppObjectEntity, AppObjectRepo, Quaternion, QuaternionDTO, Vector3, Vector3DTO } from "@vived/core";
import { ChannelModelObject } from "./ChannelModelObject";
export declare enum ChannelModelState {
    INIT = "Initialized",
    LOADING = "Loading",
    READY = "Ready",
    ERROR = "Error"
}
export declare abstract class ChannelModelEntity extends AppObjectEntity {
    static readonly type = "ChannelModelEntity";
    abstract get id(): string;
    abstract get name(): string;
    abstract set name(val: string);
    abstract get enabled(): boolean;
    abstract set enabled(val: boolean);
    abstract get bounds_min(): Vector3;
    abstract set bounds_min(val: Vector3);
    abstract get bounds_max(): Vector3;
    abstract set bounds_max(val: Vector3);
    abstract get defaultPosition(): Vector3;
    abstract set defaultPosition(val: Vector3);
    abstract get defaultRotation(): Quaternion;
    abstract set defaultRotation(val: Quaternion);
    abstract get defaultScale(): number;
    abstract set defaultScale(val: number);
    abstract get state(): ChannelModelState;
    abstract set state(val: ChannelModelState);
    abstract get modelError(): Error | undefined;
    abstract set modelError(val: Error | undefined);
    abstract get modelObjectIds(): string[];
    abstract get rootRotation(): Quaternion;
    abstract set rootRotation(val: Quaternion);
    abstract get data(): ChannelModelDTO;
    abstract setupFromData(data: object): void;
    abstract originalCollectionID?: string;
    abstract modelObjectFactory(id: string): ChannelModelObject;
    abstract addModelObject(id?: string): ChannelModelObject;
    abstract hasModelObject(id: string): boolean;
    abstract getModelObject(id: string): ChannelModelObject | undefined;
    abstract modelObjects(): ChannelModelObject[];
    static get(id: string, appObjects: AppObjectRepo): ChannelModelEntity | undefined;
}
export declare function makeChannelModelEntity(appObject: AppObject): ChannelModelEntity;
export interface ChannelModelDTO {
    bounds_min: Vector3DTO;
    bounds_max: Vector3DTO;
    version: number;
    objects: ChannelModelObjectDTO[];
    name: string;
    defaultPosition: Vector3DTO;
    defaultRotation: QuaternionDTO;
    defaultScale: number;
    originalCollectionID?: string;
    rootRotation: QuaternionDTO;
}
export interface ChannelModelObjectDTO {
    id: string;
    meshPaths: string[];
    label: string;
    tags: string[];
}
export interface ChannelModelDTOv2 {
    version: 2;
    objects: ChannelModelDataMeshDTOv2[];
    name: string;
    bounds_min: {
        x: number;
        y: number;
        z: number;
    };
    bounds_max: {
        x: number;
        y: number;
        z: number;
    };
    defaultPosition: {
        x: number;
        y: number;
        z: number;
    };
    defaultRotation: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    defaultScale: number;
    originalCollectionID?: string;
}
export interface ChannelModelDTOv1 {
    version: number;
    objects: ChannelModelDataMeshDTOv1[];
    name: string;
    bounds_min: {
        x: number;
        y: number;
        z: number;
    };
    bounds_max: {
        x: number;
        y: number;
        z: number;
    };
    defaultPosition: {
        x: number;
        y: number;
        z: number;
    };
    defaultRotation: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    defaultScale: number;
}
export interface ChannelModelDTOv0 {
    version: number;
    objects: ChannelModelDataMeshDTOv0[];
    name: string;
    description: string;
    bounds_min: {
        x: number;
        y: number;
        z: number;
    };
    bounds_max: {
        x: number;
        y: number;
        z: number;
    };
    defaultPosition: {
        x: number;
        y: number;
        z: number;
    };
    defaultRotation: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    defaultScale: number;
}
export interface ChannelModelDataMeshDTOv2 {
    id: string;
    meshPaths: string[];
    label: string;
    tags: string[];
}
export interface ChannelModelDataMeshDTOv1 {
    version: number;
    id: string;
    meshPaths: string[];
    label: string;
}
export interface ChannelModelDataMeshDTOv0 {
    id: string;
    meshPaths: string[];
    label: string;
}
//# sourceMappingURL=ChannelModel.d.ts.map