import { FC } from 'react';
import { AccountFilter, FieldOptionsInput, FilterByDateRangeType, Inbox, InputMaybe, JoinedTableOptionsInput, NeedFilter, OpportunityDeepFilter, TopicFilter, UserFilter } from '@parlor/common/amplify-schema';
import { baseSerializers } from './serializers/base-serializers';
import { csvSerializers } from './serializers/csv-serializers';
import { initialSerializers } from './serializers/initial-serializer';
export declare enum FilterOptionID {
    ACCOUNT = "account",
    ACCOUNTS = "accounts",
    ACCOUNT_NAME = "id",
    ACCOUNT_OWNER = "accountOwner",
    ACCOUNT_STATUS = "accountStatus",
    ACCOUNT_TYPE = "accountType",
    ADMIN = "admin",
    ADMIN_SUBMITTED = "adminAuthor",
    ASSIGNED_ADMIN = "assignedAdmin",
    ASSOCIATIONS = "associations",
    COMPLETION_DATE = "completionDate",
    DESCRIPTION = "description",
    DUE_DATE = "dueDate",
    DYNAMIC_SCORE_VALUES = "dynamicScoreValue",
    IS_COMPLETED = "isCompleted",
    JIRA_STATUS = "jiraStatus",
    OPEN_NEEDS = "openNeedsCount",
    OPEN_URGENT_NEEDS = "openUrgentNeedsCount",
    OPPORTUNITY_STAGE = "stage",
    OPPORTUNITY_STATUS = "status",
    OPPORTUNITY_TYPE = "type",
    OWNER = "adminAssigned",
    POINTS_OPTIONS = "pointOptions",
    PRIORITY = "priority",
    PROCESSED = "isProcessed",
    RESOLVED = "isResolved",
    RISK = "risks",
    SCORE_VALUE_MEMBERSHIPS = "scoreValueMemberships",
    SEGMENT = "segmentMemberships",
    SOURCE = "objectSource",
    STATUS = "statusOptionID",
    SUBMITTED = "created_at",
    TASK_CREATOR = "adminCreator",
    TASK_TYPE = "taskType",
    THEME = "themes",
    TOPIC = "topic",
    TOPIC_REVENUE = "revenue",
    TYPE = "typeOptionID",
    URGENCY = "urgency",
    USER = "user",
    USERS = "users",
    USER_COUNT = "userCount",
    USER_EMAIL = "email",
    USER_NAME = "fullName"
}
export type RevenueOption = {
    description: string;
    id: RevenueVariant;
    title: string;
};
export declare enum FilterVariant {
    Account = "account",
    FILTER_SCORE_VALUE_ACCOUNT_OPTIONS = "score-accounts",
    Need = "need",
    Opportunity = "opportunity",
    Task = "task",
    Ticket = "ticket",
    Topic = "topic",
    User = "user"
}
export declare enum RevenueVariant {
    Current = "openCurrentRevenue",
    Lost = "openClosedLostRevenue",
    Open = "openPotentialRevenue"
}
export declare namespace FilterOptionValue {
    type Default<T = string[]> = T;
    type Interval = {
        isChecked: boolean;
        lower: string;
        upper: string;
    };
    type ArrayInterval = {
        lower: string;
        upper: string;
    }[];
    type ByInbox = Record<Inbox['id'], string[]>;
    type Revenue = Record<RevenueVariant, Interval>;
    type Text = string;
}
export declare namespace FilterOptionComponentProps {
    type Default<T = string[]> = {
        inboxId: string;
        isFilterGroupButton?: boolean;
        name: string | FilterOptionID;
        value: T;
    };
    type ByInbox = {
        inboxId: string;
        isFilterGroupButton?: boolean;
        name: string | FilterOptionID;
    };
    type Interval = {
        isFilterGroupButton?: boolean;
        name: string | FilterOptionID;
    };
    type ArrayInterval = {
        isFilterGroupButton?: boolean;
        name: string | FilterOptionID;
    };
    type Revenue = {
        isFilterGroupButton?: boolean;
        name: string | FilterOptionID;
    };
    type Text = {
        isFilterGroupButton?: boolean;
        name: string | FilterOptionID;
        value: string;
    };
}
export type SerializerType = 'default' | 'byInbox' | 'interval' | 'arrayInterval' | 'between' | 'revenue' | 'boolean' | 'string';
export type Serializers = {
    base: (typeof baseSerializers)[SerializerType];
    csv: (typeof csvSerializers)[SerializerType];
    initial: (typeof initialSerializers)[SerializerType];
};
export declare namespace FilterOption {
    type ALL = Default | ByInbox | Interval | ArrayInterval | Revenue;
    type Default = {
        component: FC<React.PropsWithChildren<FilterOptionComponentProps.Default>>;
        id: FilterOptionID | string;
        serializers: Serializers;
        title: string;
        value: FilterOptionValue.Default;
    };
    type ByInbox = {
        component: FC<React.PropsWithChildren<FilterOptionComponentProps.ByInbox>>;
        id: FilterOptionID | string;
        serializers: Serializers;
        title: string;
        value: FilterOptionValue.ByInbox;
    };
    type Interval = {
        component: FC<React.PropsWithChildren<FilterOptionComponentProps.Interval>>;
        id: FilterOptionID | string;
        serializers: Serializers;
        title: string;
        value: FilterOptionValue.Interval;
    };
    type ArrayInterval = {
        component: FC<React.PropsWithChildren<FilterOptionComponentProps.ArrayInterval>>;
        id: FilterOptionID | string;
        serializers: Serializers;
        title: string;
        value: FilterOptionValue.ArrayInterval;
    };
    type Revenue = {
        component: FC<React.PropsWithChildren<FilterOptionComponentProps.Revenue>>;
        id: FilterOptionID | string;
        serializers: Serializers;
        title: string;
        value: FilterOptionValue.Revenue;
    };
    type Text = {
        component: FC<React.PropsWithChildren<FilterOptionComponentProps.Text>>;
        id: FilterOptionID | string;
        serializers: Serializers;
        title: string;
        value: FilterOptionValue.Text;
    };
}
export type FilterResult = NeedFilter | TopicFilter | OpportunityDeepFilter | AccountFilter | UserFilter;
export type FilterCSVResult = {
    fieldOptions?: FieldOptionsInput[];
    filterByDateRange?: InputMaybe<FilterByDateRangeType>;
    joinedTableOptions?: JoinedTableOptionsInput[];
};
