/**
 * Media Service
 *
 * Provides CRUD operations for media library entries.
 * ALL methods require teamId for strict team isolation.
 *
 * @module MediaService
 */
import type { Media, CreateMediaInput, UpdateMediaInput, MediaListOptions, MediaListResult, MediaTag } from '../media/types';
export declare class MediaService {
    /**
     * Get media item by ID (team-scoped)
     *
     * @param id - Media ID
     * @param userId - User ID for RLS context
     * @param teamId - Team ID for isolation
     * @returns Media or null if not found
     */
    static getById(id: string, userId: string, teamId: string): Promise<Media | null>;
    /**
     * List media with pagination, filtering, and search (team-scoped)
     *
     * @param userId - User ID for RLS context
     * @param teamId - Team ID for isolation
     * @param options - List options (pagination, filtering, search, sort)
     * @returns Paginated media list result
     */
    static list(userId: string, teamId: string, options?: MediaListOptions): Promise<MediaListResult>;
    /**
     * Find existing media by filename and fileSize (duplicate detection, team-scoped)
     *
     * @param userId - User ID for RLS context
     * @param teamId - Team ID for isolation
     * @param filename - Original filename
     * @param fileSize - File size in bytes
     * @returns Matching media items (same name+size = likely duplicate)
     */
    static findDuplicates(userId: string, teamId: string, filename: string, fileSize: number): Promise<Media[]>;
    /**
     * Create a new media record
     *
     * @param userId - User ID (uploader)
     * @param teamId - Team ID for isolation
     * @param data - Media data
     * @returns Created media record
     */
    static create(userId: string, teamId: string, data: CreateMediaInput): Promise<Media>;
    /**
     * Update media metadata (team-scoped)
     *
     * @param id - Media ID
     * @param userId - User ID for RLS context
     * @param data - Update data (title, alt, caption)
     * @param teamId - Team ID for isolation
     * @returns Updated media record or null if not found
     */
    static update(id: string, userId: string, data: UpdateMediaInput, teamId: string): Promise<Media | null>;
    /**
     * Soft delete a media record (team-scoped)
     *
     * @param id - Media ID
     * @param userId - User ID for RLS context
     * @param teamId - Team ID for isolation
     * @returns True if deleted successfully
     */
    static softDelete(id: string, userId: string, teamId: string): Promise<boolean>;
    /**
     * Get all media tags for a team
     *
     * @param userId - User ID for RLS context
     * @param teamId - Team ID for isolation
     * @returns Array of media tags scoped to the team
     */
    static getTags(userId: string, teamId: string): Promise<MediaTag[]>;
    /**
     * Get tags for a specific media item
     *
     * @param mediaId - Media item ID
     * @param userId - User ID for RLS context
     * @param teamId - Team ID for isolation (media ownership verified before calling)
     * @returns Array of tags assigned to the media
     */
    static getMediaTags(mediaId: string, userId: string, teamId: string): Promise<MediaTag[]>;
    /**
     * Add a tag to a media item
     *
     * @param mediaId - Media item ID
     * @param tagId - Tag taxonomy ID
     * @param userId - User ID for RLS context
     * @returns True if tag was added
     */
    static addTag(mediaId: string, tagId: string, userId: string): Promise<boolean>;
    /**
     * Remove a tag from a media item
     *
     * @param mediaId - Media item ID
     * @param tagId - Tag taxonomy ID
     * @param userId - User ID for RLS context
     * @returns True if tag was removed
     */
    static removeTag(mediaId: string, tagId: string, userId: string): Promise<boolean>;
    /**
     * Set tags for a media item (replace all existing tags)
     *
     * @param mediaId - Media item ID
     * @param tagIds - Array of tag taxonomy IDs
     * @param userId - User ID for RLS context
     */
    static setTags(mediaId: string, tagIds: string[], userId: string): Promise<void>;
    /**
     * Create a new media tag (team-scoped)
     *
     * @param name - Tag display name
     * @param userId - User ID for RLS context
     * @param teamId - Team ID for isolation
     * @returns The created tag
     */
    static createTag(name: string, userId: string, teamId: string): Promise<MediaTag>;
    /**
     * Count media items (team-scoped)
     *
     * @param userId - User ID for RLS context
     * @param teamId - Team ID for isolation
     * @param options - Count options (type filter, status filter)
     * @returns Total count
     */
    static count(userId: string, teamId: string, options?: {
        type?: 'image' | 'video' | 'all';
        status?: string;
    }): Promise<number>;
}
//# sourceMappingURL=media.service.d.ts.map