import { Repository } from 'typeorm';
import { TenantEntity } from '../../entities/tenant.entity';
import { StorageService } from '../storage/storage.service';
import type { BaseMediaEntity } from './base-media.entity';
import type { MediaItemDto } from './media-item.dto';
import type { MediaRepository } from './media.repository';
import { type MediaFolder, type MediaType } from './media.constants';
export interface PreparedMedia {
    url: string;
    media_type: MediaType;
    filename: string;
    is_cover: boolean;
    sort_order: number;
}
export interface MediaView {
    id: string;
    url: string;
    media_type: MediaType;
    filename: string;
    is_cover: boolean;
    sort_order: number;
}
interface TenantScoped {
    currentTenantId(): string;
}
export declare class MediaService {
    private readonly storage;
    private readonly tenantRepo;
    private readonly logger;
    constructor(storage: StorageService, tenantRepo: Repository<TenantEntity>);
    list<T extends BaseMediaEntity>(repo: MediaRepository<T>, parentId: string): Promise<MediaView[]>;
    prepare<T extends BaseMediaEntity>(repo: MediaRepository<T>, folder: MediaFolder, items: MediaItemDto[] | undefined, parentId?: string): Promise<PreparedMedia[] | undefined>;
    sync<T extends BaseMediaEntity>(repo: MediaRepository<T>, parentId: string, prepared: PreparedMedia[] | undefined): Promise<void>;
    prepareSinglePhoto(scope: TenantScoped, folder: MediaFolder, url: string | null | undefined, currentUrl?: string | null): Promise<string | null>;
    trashUrl(url: string | null | undefined): Promise<void>;
    private ownedKey;
    private mediaTypeOf;
    private subdomainOf;
}
export {};
