import type { CrudResult, PaginatedResult, TableFilter } from '../../index.js';
import type { Snippet } from 'svelte';
export interface MailPageInfo {
    currentPage: number;
    pageSize: number;
    totalCount: number;
    hasNextPage: boolean;
    hasPreviousPage: boolean;
}
export interface MailPaginatorProps extends MailPageInfo {
    onNextClick: () => void;
    onPreviousClick: () => void;
}
export type MailFavariteToggleType = 'favorite' | 'unfavorite';
export type MailMarkReadToggleType = 'read' | 'unread';
export interface MailToolBarProps {
    onBackClick: () => void;
    onRefreshClick: () => void;
    onComposeClick?: () => void;
    selectedMails?: number[];
    showComposeButton?: boolean;
    showBackButton?: boolean;
    pageInfo?: MailPageInfo;
    showPagination?: boolean;
    showSearch?: boolean;
    customFilterComponent?: Snippet;
    onsearchChange?: (searchTerm: string) => void;
    onNextPageClick?: () => void;
    onPrevPageClick?: () => void;
    showArchiveButton?: boolean;
    onArchiveClick?: () => void;
    showDeleteButton?: boolean;
    onDeleteClick?: () => void;
    showMarkReadButton?: boolean;
    onToggleMarkReadClick?: (val: MailMarkReadToggleType) => void;
    showFavoriteButton?: boolean;
    isReadActive?: boolean;
    onToggleFavoriteClick?: (val: MailFavariteToggleType) => void;
    showMarkAsSpamButton?: boolean;
    onMarkAsSpamClick?: () => void;
    isFavoriteActive?: boolean;
}
export interface MailMenu {
    icon: string;
    title: string;
    count: number;
    path: string;
}
export interface MailSidebar {
    menus: MailMenu[];
    setActiveMenu?: (val: MailMenu) => boolean;
    onClick?: (val: MailMenu) => void;
}
export interface MailingModuleProps {
    showSidePanel?: boolean;
    showPagination?: boolean;
    showComposeButton?: boolean;
    showSearch?: boolean;
    customFilterComponent?: Snippet;
    showArchiveButton?: boolean;
    showDeleteButton?: boolean;
    showMarkReadButton?: boolean;
    showFavoriteButton?: boolean;
    showMarkAsSpamButton?: boolean;
    showMarkAsImportantButton?: boolean;
    readInbox: (skip?: number, take?: number, filter?: TableFilter<any>) => Promise<PaginatedResult<MailingMessage>> | PaginatedResult<MailingMessage> | null;
    readOutbox?: (skip?: number, take?: number, filter?: TableFilter<any>) => Promise<PaginatedResult<MailingMessage>> | PaginatedResult<MailingMessage> | null;
    toggleArchieve?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
    toggleSpam?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
    deleteEntry?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
    toggleAsRead?: (id: string | number, type?: MailMarkReadToggleType) => Promise<CrudResult<any>> | CrudResult<any> | null;
    toggleFavourite?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
    toggelImportant?: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
    readAMessage: (id: string | number) => Promise<CrudResult<any>> | CrudResult<any> | null;
    showReplies?: boolean;
}
export interface MailingMessageCardChecked {
    id: number;
    checked: boolean;
}
export interface MailingMessage {
    id: number;
    sender: string;
    subject: string;
    date: Date;
    message: string;
    notes?: string;
    isStared: boolean;
    isImportant: boolean;
    isRead: boolean;
    isChecked?: boolean;
    isSent?: boolean;
    isHtml?: boolean;
    refEntityId?: number;
    receiver: string;
    user?: {
        id: number;
        firstName: string;
        surname: string;
        staffNumber?: string;
    };
}
export interface MailingMessageCardProps extends MailingMessage {
    onItemSelected?: (id: number) => void;
    onItemChecked?: (val: MailingMessageCardChecked) => void;
    toggelImportant?: (id: number) => void;
    toggleFavorited?: (id: number) => void;
    showMarkAsImportant?: boolean;
    showMarkAsFavorite?: boolean;
    showCheckbox?: boolean;
}
export type MailingActiveBox = 'inbox' | 'outbox';
export interface MailingMessageViewerProps {
    readMessage: (id: number, type?: MailingActiveBox) => Promise<CrudResult<MailingMessage>> | CrudResult<MailingMessage> | null;
    recordId: number;
    updatePageInfo?: (val: MailPageInfo) => void;
    showReplies?: boolean;
    showHeader?: boolean;
}
export interface MailingHeaderData {
    subject: string;
    user: {
        firstName: string;
        surname: string;
        staffNumber: string;
        initials: string;
    };
    to: string;
}
export type MailingReplyType = 'reply' | 'reply-all' | 'forward';
export interface MailingHeaderProps {
    data: MailingHeaderData;
    replyType: MailingReplyType | undefined;
    showReplies?: boolean;
}
