import type { ColumnFilter } from '../../data-table';
import type { BookingStatus } from '../../../prisma/enums';
type RoutingFormInsightsTeamFilter = {
    userId?: number | null;
    teamId?: number | null;
    isAll: boolean;
    organizationId?: number | null;
    routingFormId?: string | null;
};
type RoutingFormInsightsFilter = RoutingFormInsightsTeamFilter & {
    startDate?: string;
    endDate?: string;
    memberUserId?: number | null;
    searchQuery?: string | null;
    bookingStatus?: BookingStatus | "NO_BOOKING" | null;
    fieldFilter?: {
        fieldId: string;
        optionId: string;
    } | null;
    columnFilters: ColumnFilter[];
};
declare class RoutingEventsInsights {
    private static getWhereForTeamOrAllTeams;
    static getRoutingFormStats({ teamId, startDate, endDate, isAll, organizationId, routingFormId, userId, memberUserId, searchQuery, bookingStatus, fieldFilter, }: Omit<RoutingFormInsightsFilter, "columnFilters">): Promise<{
        created: number;
        total_responses: number;
        total_responses_without_booking: number;
        total_responses_with_booking: number;
    }>;
    static getRoutingFormsForFilters({ userId, teamId, isAll, organizationId, }: {
        userId?: number;
        teamId?: number;
        isAll: boolean;
        organizationId?: number | undefined;
        routingFormId?: string | undefined;
    }): Promise<{
        id: string;
        name: string;
        _count: {
            responses: number;
        };
    }[]>;
    static getRoutingFormPaginatedResponses({ teamId, startDate, endDate, isAll, organizationId, routingFormId, cursor, limit, userId, memberUserId, columnFilters, }: Omit<RoutingFormInsightsFilter, "fieldFilter" | "bookingStatus"> & {
        cursor?: number;
        limit?: number;
    }): Promise<{
        total: number;
        data: {
            response: Record<string, {
                value: (string | number | string[]) & (string | number | string[] | undefined);
                label?: string | undefined;
            }>;
            form: {
                id: string;
                name: string;
            };
            id: number;
            createdAt: Date;
            routedToBooking: {
                status: import('../../../prisma-client').$Enums.BookingStatus;
                user: {
                    id: number;
                    name: string | null;
                    email: string;
                    avatarUrl: string | null;
                } | null;
                uid: string;
                assignmentReason: {
                    reasonString: string;
                }[];
                attendees: {
                    email: string;
                    timeZone: string;
                }[];
                createdAt: Date;
            } | null;
        }[];
        nextCursor: number | undefined;
    }>;
    static getRoutingFormFieldOptions({ userId, teamId, isAll, routingFormId, organizationId, }: RoutingFormInsightsTeamFilter): Promise<({
        label: string;
        type: string;
        id: string;
        identifier?: string | undefined;
        placeholder?: string | undefined;
        selectText?: string | undefined;
        required?: boolean | undefined;
        deleted?: boolean | undefined;
        options?: {
            label: string;
            id: string | null;
        }[] | undefined;
    } | {
        label: string;
        type: string;
        id: string;
        routerId: string;
        options?: {
            label: string;
            id: string | null;
        }[] | undefined;
        required?: boolean | undefined;
        identifier?: string | undefined;
        placeholder?: string | undefined;
        selectText?: string | undefined;
        deleted?: boolean | undefined;
    })[] | undefined>;
    static getFailedBookingsByRoutingFormGroup({ userId, teamId, isAll, routingFormId, organizationId, }: RoutingFormInsightsTeamFilter): Promise<Record<string, Record<string, {
        optionId: string;
        count: number;
        optionLabel: string;
    }[]>>>;
    static getRoutingFormHeaders({ userId, teamId, isAll, organizationId, routingFormId, }: RoutingFormInsightsTeamFilter): Promise<{
        id: string;
        label: string;
        type: string;
        options: {
            label: string;
            id: string | null;
        }[] | undefined;
    }[] | undefined>;
    static getRawData({ teamId, startDate, endDate, isAll, organizationId, routingFormId, userId, memberUserId, bookingStatus, fieldFilter, take, skip, }: Omit<RoutingFormInsightsFilter, "columnFilters"> & {
        take?: number;
        skip?: number;
    }): Promise<Record<string, unknown>[]>;
    static routedToPerPeriod({ userId, teamId, isAll, organizationId, routingFormId, startDate: _startDate, endDate: _endDate, period, cursor, userCursor, limit, searchQuery, }: RoutingFormInsightsTeamFilter & {
        period: "perDay" | "perWeek" | "perMonth";
        startDate: string;
        endDate: string;
        cursor?: string;
        userCursor?: number;
        limit?: number;
        searchQuery?: string;
    }): Promise<{
        users: {
            data: {
                performance: "above_average" | "at_average" | "below_average" | "median";
                totalBookings: number;
                id: number;
                name: string | null;
                email: string;
                avatarUrl: string | null;
            }[];
            nextCursor: number | undefined;
        };
        periodStats: {
            data: {
                userId: number;
                period_start: Date;
                total: number;
            }[];
            nextCursor: string | undefined;
        };
    }>;
    static routedToPerPeriodCsv({ userId, teamId, isAll, organizationId, routingFormId, startDate: _startDate, endDate: _endDate, period, searchQuery, }: RoutingFormInsightsTeamFilter & {
        period: "perDay" | "perWeek" | "perMonth";
        startDate: string;
        endDate: string;
        searchQuery?: string;
    }): Promise<{
        "User ID": string;
        Name: string;
        Email: string;
        "Total Bookings": string;
        Performance: "above_average" | "at_average" | "below_average" | "median";
    }[]>;
    static objectToCsv(data: Record<string, string>[]): string;
}
export { RoutingEventsInsights };
//# sourceMappingURL=routing-events.d.ts.map