import { IJsonSchema } from '@jacquesparis/objects-model';
import { Getter } from '@loopback/core';
import { BelongsToAccessor, DefaultCrudRepository, Entity } from '@loopback/repository';
import { DbDataSource } from '../datasources/db.datasource';
import { ContentEntity } from '../models';
import { ObjectNode, ObjectNodeRelations } from '../models/object-node.model';
import { ObjectNodeRepository } from '../repositories/object-node.repository';
import { ContentEntityService, ContentEntityServiceInterface, EntityWithContent } from '../services/content-entity/content-entity.service';
export declare class ContentExtension<T extends Entity> extends ContentEntity {
    content: T;
    objectNodeId: string;
    constructor(data?: Partial<T>);
}
export interface ContentExtensionRelations {
    objectNode: ObjectNodeRelations;
}
export declare type ContentExtensionWithRelations<T extends Entity> = ContentExtension<T> & ContentExtensionRelations;
export declare class ContentExtensionRepository<T extends Entity, ID extends string | undefined> extends DefaultCrudRepository<ContentExtension<T>, ID, ContentExtensionRelations> {
    protected objectNodeRepositoryGetter: Getter<ObjectNodeRepository>;
    readonly objectNode: BelongsToAccessor<ObjectNode, ID>;
    constructor(entityClass: typeof Entity & {
        prototype: ContentExtension<T>;
    }, dataSource: DbDataSource, objectNodeRepositoryGetter: Getter<ObjectNodeRepository>);
}
export declare abstract class ContentExtensionService<E extends Entity, ID extends string | undefined> implements ContentEntityServiceInterface {
    providerId: string;
    serviceId: string;
    protected contentEntityService: ContentEntityService;
    protected contentExtensionRepository: ContentExtensionRepository<E, ID>;
    protected contentTypeName: string;
    constructor(providerId: string, serviceId: string, contentEntityService: ContentEntityService, contentExtensionRepository: ContentExtensionRepository<E, ID>, contentTypeName: string);
    get fieldName(): string;
    abstract getContentDefinition(): Promise<IJsonSchema>;
    deleteContents(entities: EntityWithContent[], fieldName?: string): Promise<void>;
    manageContent(entity: EntityWithContent, postedEntity: EntityWithContent, fieldName?: string): Promise<boolean>;
    getContent(entity: EntityWithContent, fieldName: string | undefined, args: {
        contentId: ID;
    }): Promise<E>;
    addTransientContent(entity: EntityWithContent, fieldName?: string): Promise<void>;
}
