import { TicketStatus, TicketPriority, TicketSource, CommentType, VisibilityScope } from '../dto';
export interface TicketEntity {
    id: string;
    ticketNo: string;
    title: string;
    description: string;
    categoryId: string;
    priority: TicketPriority;
    tags: string[];
    status: TicketStatus;
    creatorId: string;
    assigneeId: string | null;
    assigneeGroupId: string | null;
    watcherIds: string[];
    createdAt: Date;
    updatedAt: Date;
    firstResponseAt: Date | null;
    resolvedAt: Date | null;
    closedAt: Date | null;
    dueAt: Date | null;
    slaId: string | null;
    slaBreached: boolean;
    slaPausedAt: Date | null;
    slaPausedDuration: number;
    satisfactionRating: number | null;
    satisfactionComment: string | null;
    satisfactionRatedAt: Date | null;
    source: TicketSource;
    externalId: string | null;
    channelMetadata: Record<string, any> | null;
    resolution: string | null;
    rootCause: string | null;
    relatedTicketIds: string[];
    parentTicketId: string | null;
    approvalInstanceId: string | null;
    region: string;
    tenantId: string | null;
    language: string | null;
    complianceFlag: boolean;
    deletedAt: Date | null;
}
export interface TicketDetailResponse {
    id: string;
    ticketNo: string;
    title: string;
    description: string;
    category: {
        id: string;
        name: string;
        code: string;
    };
    priority: TicketPriority;
    status: TicketStatus;
    creator: {
        id: string;
        name: string;
        email: string;
        department?: string;
    };
    assignee: {
        id: string;
        name: string;
        email: string;
    } | null;
    assigneeGroup: {
        id: string;
        name: string;
    } | null;
    watchers: Array<{
        id: string;
        name: string;
    }>;
    tags: string[];
    source: TicketSource;
    channelMetadata: Record<string, any> | null;
    language: string | null;
    region: string;
    tenantId: string | null;
    resolution: string | null;
    rootCause: string | null;
    sla: {
        id: string;
        name: string;
        firstResponseDue: Date | null;
        resolutionDue: Date | null;
        firstResponseAt: Date | null;
        isBreached: boolean;
        isPaused: boolean;
    } | null;
    createdAt: Date;
    updatedAt: Date;
    firstResponseAt: Date | null;
    resolvedAt: Date | null;
    closedAt: Date | null;
    attachments: AttachmentResponse[];
}
export interface TicketListItemResponse {
    id: string;
    ticketNo: string;
    title: string;
    priority: TicketPriority;
    status: TicketStatus;
    category: {
        id: string;
        name: string;
        code: string;
    };
    creator: {
        id: string;
        name: string;
    };
    assignee: {
        id: string;
        name: string;
    } | null;
    createdAt: Date;
    updatedAt: Date;
    dueAt: Date | null;
    slaBreached: boolean;
}
export interface PaginatedResponse<T> {
    items: T[];
    total: number;
    page: number;
    limit: number;
    totalPages: number;
    hasNext: boolean;
    hasPrev: boolean;
}
export interface AttachmentResponse {
    id: string;
    fileName: string;
    fileUrl: string;
    fileSize: number;
    mimeType: string;
    uploadedBy: string;
    createdAt: Date;
}
export interface CommentResponse {
    id: string;
    content: string;
    type: CommentType;
    isInternal: boolean;
    visibilityScope: VisibilityScope;
    author: {
        id: string;
        name: string;
    };
    attachments: AttachmentResponse[];
    mentionedUsers: Array<{
        id: string;
        name: string;
    }>;
    createdAt: Date;
}
export interface ActivityResponse {
    id: string;
    type: string;
    content: Record<string, any>;
    operator: {
        id: string;
        name: string;
    } | null;
    createdAt: Date;
}
export declare const STATUS_TRANSITIONS: Record<TicketStatus, TicketStatus[]>;
export declare function isValidStatusTransition(from: TicketStatus, to: TicketStatus): boolean;
