export interface MediaFile {
    id: string;
    filename: string;
    originalName: string;
    mimeType: string;
    size: number;
    url: string;
    path: string;
    processed: boolean;
    processingStatus: ProcessingStatus;
    optimizedUrl?: string;
    thumbnailUrl?: string;
    webpUrl?: string;
    width?: number;
    height?: number;
    aspectRatio?: number;
    colorProfile?: string;
    checksum?: string;
    virusScanned: boolean;
    scanResult?: ScanResult;
    isPublic: boolean;
    accessLevel: AccessLevel;
    folderId?: string;
    folder?: MediaFolder;
    collections: MediaCollection[];
    tags: MediaTag[];
    alt?: string;
    caption?: string;
    title?: string;
    description?: string;
    metadata?: Record<string, unknown>;
    downloadCount: number;
    viewCount: number;
    lastAccessed?: Date;
    cdnUrl?: string;
    cdnProvider?: string;
    cacheStatus?: CacheStatus;
    userId?: string;
    siteId?: string;
    createdAt: Date;
    updatedAt: Date;
}
export interface MediaFolder {
    id: string;
    name: string;
    slug: string;
    description?: string;
    path: string;
    parentId?: string;
    parent?: MediaFolder;
    children: MediaFolder[];
    isPublic: boolean;
    permissions?: Record<string, unknown>;
    siteId?: string;
    userId: string;
    uploads: MediaFile[];
    createdAt: Date;
    updatedAt: Date;
}
export interface MediaCollection {
    id: string;
    name: string;
    slug: string;
    description?: string;
    color?: string;
    isPublic: boolean;
    isFeatured: boolean;
    siteId?: string;
    userId: string;
    uploads: MediaFile[];
    createdAt: Date;
    updatedAt: Date;
}
export interface MediaTag {
    id: string;
    name: string;
    slug: string;
    color?: string;
    description?: string;
    siteId?: string;
    usageCount: number;
    uploads: MediaFile[];
    createdAt: Date;
    updatedAt: Date;
}
export interface MediaProcessingJob {
    id: string;
    uploadId: string;
    upload: MediaFile;
    type: ProcessingJobType;
    status: JobStatus;
    priority: number;
    params?: Record<string, unknown>;
    result?: Record<string, unknown>;
    error?: string;
    startedAt?: Date;
    completedAt?: Date;
    attempts: number;
    maxAttempts: number;
    workerId?: string;
    createdAt: Date;
    updatedAt: Date;
}
export interface MediaUsageAnalytics {
    id: string;
    uploadId: string;
    upload: MediaFile;
    referrer?: string;
    userAgent?: string;
    ipAddress?: string;
    country?: string;
    action: UsageAction;
    siteId?: string;
    timestamp: Date;
}
export declare enum ProcessingStatus {
    PENDING = "pending",
    PROCESSING = "processing",
    COMPLETED = "completed",
    FAILED = "failed"
}
export declare enum ScanResult {
    CLEAN = "clean",
    INFECTED = "infected",
    ERROR = "error"
}
export declare enum AccessLevel {
    PUBLIC = "public",
    PRIVATE = "private",
    RESTRICTED = "restricted"
}
export declare enum CacheStatus {
    CACHED = "cached",
    PURGED = "purged",
    PENDING = "pending"
}
export declare enum ProcessingJobType {
    RESIZE = "resize",
    OPTIMIZE = "optimize",
    CONVERT = "convert",
    SCAN = "scan",
    THUMBNAIL = "thumbnail",
    WEBP_CONVERSION = "webp_conversion",
    WATERMARK = "watermark"
}
export declare enum JobStatus {
    PENDING = "pending",
    PROCESSING = "processing",
    COMPLETED = "completed",
    FAILED = "failed",
    CANCELLED = "cancelled"
}
export declare enum UsageAction {
    VIEW = "view",
    DOWNLOAD = "download",
    EMBED = "embed",
    THUMBNAIL = "thumbnail",
    PREVIEW = "preview"
}
export interface UploadRequest {
    file: File;
    folderId?: string;
    collections?: string[];
    tags?: string[];
    alt?: string;
    caption?: string;
    title?: string;
    description?: string;
    isPublic?: boolean;
    accessLevel?: AccessLevel;
}
export interface UploadResponse {
    success: boolean;
    data?: MediaFile;
    error?: string;
    jobId?: string;
}
export interface UploadProgress {
    uploadId: string;
    progress: number;
    status: "uploading" | "processing" | "completed" | "error";
    message?: string;
    bytesUploaded: number;
    totalBytes: number;
    speed?: number;
    eta?: number;
}
export interface BatchUploadRequest {
    files: File[];
    folderId?: string;
    collections?: string[];
    tags?: string[];
    defaultMetadata?: {
        alt?: string;
        caption?: string;
        title?: string;
        description?: string;
    };
    isPublic?: boolean;
    accessLevel?: AccessLevel;
}
export interface BatchUploadProgress {
    totalFiles: number;
    completedFiles: number;
    failedFiles: number;
    currentFile?: string;
    overallProgress: number;
    fileProgresses: Record<string, UploadProgress>;
}
export interface MediaSearchFilters {
    query?: string;
    mimeTypes?: string[];
    tags?: string[];
    collections?: string[];
    folderId?: string;
    dateRange?: {
        start: Date;
        end: Date;
    };
    sizeRange?: {
        min: number;
        max: number;
    };
    dimensions?: {
        minWidth?: number;
        maxWidth?: number;
        minHeight?: number;
        maxHeight?: number;
    };
    processed?: boolean;
    isPublic?: boolean;
    accessLevel?: AccessLevel;
}
export interface MediaSearchOptions {
    limit?: number;
    offset?: number;
    sortBy?: "createdAt" | "updatedAt" | "size" | "name" | "viewCount" | "downloadCount";
    sortOrder?: "asc" | "desc";
    includeFolders?: boolean;
    includeCollections?: boolean;
    includeTags?: boolean;
}
export interface MediaSearchResult {
    files: MediaFile[];
    folders?: MediaFolder[];
    collections?: MediaCollection[];
    tags?: MediaTag[];
    total: number;
    hasMore: boolean;
    facets?: {
        mimeTypes: Record<string, number>;
        tags: Record<string, number>;
        collections: Record<string, number>;
        folders: Record<string, number>;
    };
}
export interface MediaLibraryProps {
    siteId?: string;
    multiSelect?: boolean;
    allowUpload?: boolean;
    allowFolders?: boolean;
    allowCollections?: boolean;
    allowTags?: boolean;
    maxSelections?: number;
    acceptedTypes?: string[];
    onSelect?: (files: MediaFile[]) => void;
    onUpload?: (files: MediaFile[]) => void;
    className?: string;
}
export interface MediaPickerProps {
    isOpen: boolean;
    onClose: () => void;
    onSelect: (files: MediaFile[]) => void;
    multiSelect?: boolean;
    acceptedTypes?: string[];
    maxSelections?: number;
    siteId?: string;
}
export interface MediaGridProps {
    files: MediaFile[];
    selectedFiles?: MediaFile[];
    onSelect?: (files: MediaFile[]) => void;
    onPreview?: (file: MediaFile) => void;
    multiSelect?: boolean;
    viewMode?: "grid" | "list";
    className?: string;
}
export interface MediaUploadZoneProps {
    onUpload: (files: File[]) => void;
    onProgress?: (progress: BatchUploadProgress) => void;
    acceptedTypes?: string[];
    maxFileSize?: number;
    maxFiles?: number;
    disabled?: boolean;
    className?: string;
}
export interface MediaConfig {
    storage: {
        provider: "local" | "aws" | "gcp" | "azure";
        bucket?: string;
        region?: string;
        path?: string;
        maxFileSize: number;
        allowedTypes: string[];
    };
    processing: {
        enabled: boolean;
        thumbnailSizes: number[];
        webpConversion: boolean;
        qualitySettings: {
            jpeg: number;
            webp: number;
            png: number;
        };
    };
    cdn: {
        enabled: boolean;
        provider?: "cloudflare" | "aws" | "gcp";
        domain?: string;
        cacheHeaders: Record<string, string>;
    };
    security: {
        virusScanning: boolean;
        checksumValidation: boolean;
        signedUrls: boolean;
        maxQuotaPerSite: number;
        maxQuotaPerUser: number;
    };
    features: {
        folders: boolean;
        collections: boolean;
        tags: boolean;
        analytics: boolean;
        watermarking: boolean;
    };
}
//# sourceMappingURL=media.d.ts.map