import type { PopoverOrigin } from '@mui/material/Popover';
import type { ComponentProps, ElementType, ReactNode, SyntheticEvent } from 'react';
import type { ButtonProps } from '../Button';
export type Organization = {
    /**
     * Идентификатор организации
     */
    id: string;
    /**
     * Название организации
     */
    name: string;
    /**
     * ИНН организации
     */
    inn?: string;
    /**
     * КПП организации
     */
    kpp?: string;
};
export type LinkButtonProps<TComponent extends ElementType = ElementType> = Omit<ButtonProps<TComponent>, 'children' | 'variant' | 'size' | 'color' | 'key' | 'loadingIndicator' | 'loadingPosition' | 'component'> & {
    name?: string;
} & Omit<ComponentProps<TComponent>, ''>;
export type RenderItemParams<TData extends Organization & Record<string, unknown> = Organization> = {
    organization: TData & {
        linkButton?: LinkButtonProps;
    };
    isSelected: boolean;
    onSelect?: () => void;
};
export type NotSelectedPlaceholderProps = {
    isOpen: boolean;
    onOpen: (event: SyntheticEvent) => void;
};
export type MenuOrganizationProps<TData extends Organization = Organization> = {
    /**
     * Настройка названия раздела с текущей организацией
     */
    currentOrganizationGroupLabel?: string;
    /**
     * Выбранная организация
     */
    currentOrganization?: TData & {
        linkButton?: LinkButtonProps;
    };
    /**
     * Список организаций
     */
    organizations: TData[];
    /**
     * Обработчик выбора организации
     */
    onChange: (organization: TData) => void;
    /**
     * Обработчик поиска
     */
    onChangeSearch?: (value?: string) => void;
    /**
     * Настройка кнопки в футере
     */
    action?: {
        text: string;
    } & Pick<ButtonProps, 'onClick' | 'variant' | 'component' | 'startIcon' | 'endIcon' | 'href'>;
    /**
     * Флаг загрузки
     */
    isLoading?: boolean;
    /**
     * Флаг состояния ошибки
     */
    isError?: boolean;
    /**
     * Группировка организаций
     * @property {string} name - Название группы.
     * @property {Function} filter - Функция фильтрации, которая принимает список организаций и возвращает отфильтрованный список.
     */
    groupBy?: Array<{
        name: string;
        filter: (organizations: TData[]) => TData[];
    }>;
    /**
     * Обработчик загрузки организаций
     */
    onRetry: () => void;
    /**
     * Обработчик открытия Popover
     */
    onOpen?: () => void;
    /**
     * Обработчик закрытия Popover
     */
    onClose?: () => void;
    /**
     * Если true, Popover будет открыт
     */
    isOpen?: boolean;
    /**
     * Если true, компонент будет недоступен для взаимодействия
     */
    isDisabled?: boolean;
    /**
     * Текст тултипа при заблокированном состоянии компонента
     */
    disabledReason?: string;
    /**
     * Скрытие персональных данных от инструментов мониторинга
     */
    isHidePersonalData?: boolean;
    /**
     * Render-props, позволяет более гибко настраивать содержимое элемента
     *
     * @example
     * renderItem={({ organization, isSelected, onSelect }) => (
     *   <MenuItem isSelected={isSelected} onChange={onSelect}>
     *     {organization.name}
     *   </MenuItem>
     * )}
     */
    renderItem?: (params: RenderItemParams<TData>) => ReactNode;
    /**
     * Render-props, позволяет кастомизировать содержимое кнопки OrganizationButton
     *
     * @example
     * renderPreview={(organization) => (
     *   <Avatar color="#EC4899" size="md">
     *     {getInitials(organization.name)}
     *   </Avatar>
     * )}
     */
    renderPreview?: (organization: TData, params: {
        className?: string;
    }) => ReactNode;
    /**
     * Позиция точки привязки на кнопке
     * @example
     * anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
     */
    anchorOrigin?: PopoverOrigin;
    /**
     * Позиция точки привязки на Popover
     * @example
     * transformOrigin={{ vertical: 'top', horizontal: 'left' }}
     */
    transformOrigin?: PopoverOrigin;
    /**
     * Placeholder для случая, когда не выбрана организация
     * @example
     * notSelectedPlaceholder={({ isOpen, onOpen }) => (
     *  <Button variant="text" onClick={onOpen}>
     *    <Chip
     *      status="warning"
     *      label="Организация отсутствуют в профиле"
     *      endAdornment={<ArrowDFillSm />}
     *      isSelected={isOpen}
     *    />
     *  </Button>
     * )}
     */
    notSelectedPlaceholder?: (params: NotSelectedPlaceholderProps) => ReactNode;
};
