import { CommentAccessMode } from "../../utils/enums";
import { Attachment } from "./attachment.model";
import { CommentAnnotation } from "./comment-annotation.data.model";
import { Comment } from "./comment.data.model";
import { CustomPriority, CustomStatus } from "./custom-filter.data.model";
import { ReactionItem } from "./reaction-annotation.data.model";
import { UserContact } from "./user-contact.data.model";
import { User } from "./user.data.model";
export interface RequestOptions {
    organizationId?: string;
    documentId?: string;
    folderId?: string;
    filters?: any;
    documentIds?: string[];
    allDocuments?: boolean;
}
export interface UpdatePriorityRequest {
    annotationId: string;
    priority?: CustomPriority;
    options?: RequestOptions;
}
export interface UpdateStatusRequest {
    annotationId: string;
    status: CustomStatus;
    options?: RequestOptions;
}
export interface UpdateAccessRequest {
    annotationId: string;
    accessMode: CommentAccessMode;
    options?: RequestOptions;
}
export interface ResolveCommentAnnotationRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface GetLinkRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface CopyLinkRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface AddCommentAnnotationRequest {
    annotation: CommentAnnotation;
    options?: RequestOptions;
}
export interface ApproveCommentAnnotationRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface AcceptCommentAnnotationRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface RejectCommentAnnotationRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface DeleteCommentAnnotationRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface CommentRequestQuery {
    organizationId?: string;
    documentIds?: string[];
    locationIds?: string[];
    statusIds?: string[];
    folderId?: string;
    allDocuments?: boolean;
    locationId?: string;
    aggregateDocuments?: boolean;
    filterGhostComments?: boolean;
}
export interface SubscribeCommentAnnotationRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface UnsubscribeCommentAnnotationRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface AssignUserRequest {
    annotationId: string;
    assignedTo: UserContact;
    options?: RequestOptions;
}
export interface AddCommentRequest {
    annotationId: string;
    comment: Comment;
    assignedTo?: User;
    assigned?: boolean;
    options?: RequestOptions;
}
export interface UpdateCommentRequest {
    annotationId: string;
    comment: Comment;
    skipDeleteThreadConfirmation?: boolean;
    merge?: boolean;
    options?: RequestOptions;
}
export interface DeleteCommentRequest {
    annotationId: string;
    commentId: number;
    skipDeleteThreadConfirmation?: boolean;
    options?: RequestOptions;
}
export interface GetCommentRequest {
    annotationId: string;
    options?: RequestOptions;
}
export interface AddAttachmentRequest {
    annotationId: string;
    files: File[];
    options?: RequestOptions;
}
export interface AddAttachmentResponse {
    valid: boolean;
    file?: File;
    maxAllowedSize: number;
    error?: string;
    attachment?: Attachment;
}
export interface DeleteAttachmentRequest {
    annotationId: string;
    commentId: number;
    attachmentId: number;
    options?: RequestOptions;
}
export interface GetAttachmentRequest {
    annotationId: string;
    commentId: number;
    options?: RequestOptions;
}
export interface GetRecordingRequest {
    annotationId: string;
    commentId: number;
    options?: RequestOptions;
}
export interface DeleteRecordingRequest {
    annotationId: string;
    commentId: number;
    recorderId: string;
    options?: RequestOptions;
}
export interface AddReactionRequest {
    annotationId: string;
    commentId: number;
    reaction: {
        reactionId: string;
        customReaction?: ReactionItem;
    };
    options?: RequestOptions;
}
export interface DeleteReactionRequest {
    annotationId: string;
    commentId: number;
    reaction: {
        reactionId: string;
        customReaction?: ReactionItem;
    };
    options?: RequestOptions;
}
export interface ToggleReactionRequest {
    annotationId: string;
    commentId: number;
    reaction: {
        reactionId: string;
        customReaction?: ReactionItem;
    };
    options?: RequestOptions;
}
export interface FetchCommentAnnotationsRequest {
    createdAfter?: number;
    createdBefore?: number;
    updatedAfter?: number;
    updatedBefore?: number;
    statusIds?: string[];
    order?: 'asc' | 'desc';
    pageToken?: string;
    allDocuments?: boolean;
    pageSize?: number;
    organizationId?: string;
    locationId?: string;
    documentIds?: string[];
    folderId?: string;
    resolvedBy?: string;
    userIds?: string[];
    mentionedUserIds?: string[];
}
