export declare const FILE_KIND_TAGS: readonly ["image", "video", "audio", "document", "spreadsheet", "font", "archive"];
export type FileKindTag = (typeof FILE_KIND_TAGS)[number];
export declare const MEDIA_ASSET_FILE_FILTERS: readonly ["all", "images", "videos", "audio", "documents", "downloads"];
export type MediaAssetFileFilterContract = (typeof MEDIA_ASSET_FILE_FILTERS)[number];
export declare const RENDERABLE_FILE_KIND_TAGS: readonly ["image", "video", "audio"];
export type RenderableFileKindTag = (typeof RENDERABLE_FILE_KIND_TAGS)[number];
export type ImageFileFormat = "jpeg" | "png" | "webp" | "gif" | "avif" | "heic" | "heif" | "svg";
export type VideoFileFormat = "mp4" | "webm" | "mov";
export type AudioFileFormat = "mpeg" | "mp4" | "wav" | "ogg" | "webm" | "flac";
export type DocumentFileFormat = "pdf" | "docx" | "txt" | "rtf";
export type SpreadsheetFileFormat = "csv";
export type FontFileFormat = "woff2";
export type ArchiveFileFormat = "zip";
export type FileKindContract = {
    readonly tag: "image";
    readonly family: "raster";
    readonly format: ImageFileFormat;
} | {
    readonly tag: "video";
    readonly format: VideoFileFormat;
} | {
    readonly tag: "audio";
    readonly format: AudioFileFormat;
} | {
    readonly tag: "document";
    readonly format: DocumentFileFormat;
} | {
    readonly tag: "spreadsheet";
    readonly format: SpreadsheetFileFormat;
} | {
    readonly tag: "font";
    readonly format: FontFileFormat;
} | {
    readonly tag: "archive";
    readonly format: ArchiveFileFormat;
};
export declare const FILE_USE_TAGS: readonly ["media-library", "content-download", "digital-product-file", "workflow-input", "booking-evidence", "site-brand-asset", "site-font-file", "temporary-ingestion"];
export type FileUseTag = (typeof FILE_USE_TAGS)[number];
export type TemporaryIngestionKind = "backup-zip" | "newsletter-csv" | "instagram-zip";
export type FileUseContract = {
    readonly tag: "media-library";
    readonly renderUse: RenderableFileKindTag;
} | {
    readonly tag: "content-download";
} | {
    readonly tag: "digital-product-file";
    readonly fulfillmentVisibility: "entitled-customer";
} | {
    readonly tag: "workflow-input";
    readonly workflowKind: "audio-enrichment" | "generic-file-processing";
} | {
    readonly tag: "booking-evidence";
    readonly requirementId: string;
} | {
    readonly tag: "site-brand-asset";
    readonly brandUse: "logo" | "social-image";
} | {
    readonly tag: "site-font-file";
    readonly fontId: string;
} | {
    readonly tag: "temporary-ingestion";
    readonly ingestionKind: TemporaryIngestionKind;
};
export declare const UPLOAD_INTENT_TAGS: readonly ["media-library", "content-download", "digital-product-file", "booking-evidence", "site-brand-asset", "site-font-file", "temporary-ingestion"];
export type UploadIntentTag = (typeof UPLOAD_INTENT_TAGS)[number];
export type UploadIntentContract = {
    readonly tag: "media-library";
    readonly allowedRenderUses: readonly [RenderableFileKindTag, ...RenderableFileKindTag[]];
    readonly triggerWorkflow?: "audio-enrichment";
} | {
    readonly tag: "content-download";
} | {
    readonly tag: "digital-product-file";
    readonly productId: string;
} | {
    readonly tag: "booking-evidence";
    readonly requirementId: string;
    readonly sessionId: string;
} | {
    readonly tag: "site-brand-asset";
    readonly brandUse: "logo" | "social-image";
} | {
    readonly tag: "site-font-file";
    readonly fontFamilyId: string;
} | {
    readonly tag: "temporary-ingestion";
    readonly ingestionKind: TemporaryIngestionKind;
};
export declare const STORAGE_CLASSES: readonly ["public-site", "private-site", "temporary"];
export type StorageClass = (typeof STORAGE_CLASSES)[number];
export declare const ACCESS_POLICY_TAGS: readonly ["public-read", "site-editor-read", "signed-public-render", "entitled-customer-read", "booking-session-read", "management-api-read"];
export type AccessPolicyTag = (typeof ACCESS_POLICY_TAGS)[number];
export type EntitledCustomerAccessScopeContract = {
    readonly tag: "any-entitled-customer";
} | {
    readonly tag: "specific-entitlement";
    readonly entitlementId: string;
};
export type AccessPolicyContract = {
    readonly tag: "public-read";
} | {
    readonly tag: "site-editor-read";
    readonly siteId: string;
} | {
    readonly tag: "signed-public-render";
    readonly expiresInSeconds: number;
} | {
    readonly tag: "entitled-customer-read";
    readonly scope: EntitledCustomerAccessScopeContract;
    readonly expiresInSeconds?: number;
} | {
    readonly tag: "booking-session-read";
    readonly sessionId: string;
    readonly expiresInSeconds?: number;
} | {
    readonly tag: "management-api-read";
};
export type MediaClassifyJobResponse = {
    id: string;
    site_id: string;
    status: "pending" | "processing" | "completed" | "failed";
    asset_ids: string[];
    next_index: number;
    force: boolean;
    requested_by: string | null;
    prompt: string | null;
    results: Array<{
        assetId: string;
        ok: boolean;
        skipped?: boolean;
        error?: string | null;
    }>;
    last_error: string | null;
    created_at: string;
    updated_at: string;
    started_at: string | null;
    completed_at: string | null;
};
export type MediaLabelSummary = {
    slug: string;
    name: string;
    count: number;
};
export type MediaSettingsResponse = {
    siteId: string;
    persistVariants: boolean;
    updatedAt: string | null;
};
export type MediaJobSummaryResponse = {
    processed: number;
    skipped: number;
    failures: number;
};
export type MediaBulkDeleteAssetFailure = {
    kind: "ASSET_NOT_FOUND";
    message: "Asset not found";
} | {
    kind: "ASSET_ACCESS_DENIED";
    message: "Access denied";
} | {
    kind: "LABEL_CLEANUP_FAILED";
    message: string;
} | {
    kind: "DELETE_FAILED";
    message: string;
};
export type MediaBulkDeleteResponse = {
    deleted: number;
    failed: number;
    errors?: Array<{
        assetId: string;
        error: MediaBulkDeleteAssetFailure;
    }>;
};
export type CreateMediaAssetBody = {
    siteId: string;
    storageBucket: string;
    storagePath: string;
    filename: string;
    mimeType: string;
    width?: number;
    height?: number;
    bytes: number;
    checksumSha256?: string | null;
    source?: "upload" | "instagram";
    title?: string | null;
    altText?: string | null;
    caption?: string | null;
    exif?: Record<string, unknown> | null;
};
export type MediaAssetResponse = {
    id: string;
    siteId: string;
    storageBucket: string | null;
    storagePath: string;
    filename: string;
    mimeType: string;
    width: number | null;
    height: number | null;
    bytes: number | null;
    checksumSha256: string | null;
    source: "upload" | "instagram";
    title?: string;
    altText: string | null;
    caption: string | null;
    exif: Record<string, unknown> | null;
    createdBy: string | null;
    createdAt: string;
    updatedAt: string;
    labels?: Array<{
        id: number;
        slug: string;
        name: string;
    }>;
};
