import { type Ref, type ComputedRef } from 'vue';
import { type ChannelType } from './useCommunicationChannels';
/** Допустимые статусы контактного атрибута */
export declare const CONTACT_ATTRIBUTE_STATUSES: readonly ["confirmed", "unconfirmed"];
export type ContactAttributeStatus = (typeof CONTACT_ATTRIBUTE_STATUSES)[number];
/**
 * Тип контактного атрибута из панели коммуникаций.
 */
export type ContactAttribute = {
    id: string;
    type: string;
    value?: string;
    data?: unknown;
    status?: ContactAttributeStatus;
    [key: string]: unknown;
};
export declare function isContactAttributeStatus(value: unknown): value is ContactAttributeStatus;
/**
 * CSS-класс для привязки UI к статусу атрибута (`status-confirmed` / `status-unconfirmed`).
 */
export declare function getAttributeStatusClass(attribute: ContactAttribute | null | undefined): `status-${ContactAttributeStatus}` | null;
export declare function isAttributeConfirmed(attribute: ContactAttribute | null | undefined): boolean;
export declare function isAttributeUnconfirmed(attribute: ContactAttribute | null | undefined): boolean;
/** Нужно запросить подтверждение атрибута у родителя (запрос на сервер). */
export declare function needsAttributeConfirmation(attribute: ContactAttribute | null | undefined): boolean;
/** Payload события confirm-attribute */
export type ConfirmAttributePayload = {
    attributeId: string;
    channelId: string;
    channelType: string;
    attribute: ContactAttribute;
};
export declare function shouldShowAttributeCheckmark(attribute: ContactAttribute | null | undefined, isSelected: boolean): boolean;
export declare function getAttributeCheckIndicatorClass(attribute: ContactAttribute | null | undefined, isSelected: boolean): 'selected-indicator' | 'confirmed-indicator' | null;
export declare function isAttributeConfirming(attribute: ContactAttribute | null | undefined, confirmingAttributeId: string | null | undefined): boolean;
/** Атрибут заблокирован после неудачного подтверждения (до повторного входа в меню). */
export declare function isAttributeBlocked(attribute: ContactAttribute | null | undefined, blockedAttributeIds: readonly string[] | null | undefined): boolean;
/** Ключи подсказок для галочки / спиннера в слоте индикатора */
export type AttributeIndicatorTooltipKey = 'selected' | 'confirmed' | 'confirming' | 'blocked';
export type AttributeIndicatorTooltips = Partial<Record<AttributeIndicatorTooltipKey, string>>;
export type AttributeIndicatorTooltipContext = {
    isSelected: boolean;
    confirmingAttributeId: string | null | undefined;
    blockedAttributeIds: readonly string[];
};
export declare function shouldShowAttributeIndicator(attribute: ContactAttribute | null | undefined, context: AttributeIndicatorTooltipContext): boolean;
/** Слот индикатора для заблокированного атрибута без галочки / спиннера (только тултип). */
export declare function shouldShowBlockedIndicatorSlot(attribute: ContactAttribute | null | undefined, context: AttributeIndicatorTooltipContext): boolean;
/**
 * Определяет ключ подсказки индикатора по приоритету состояния.
 */
export declare function getAttributeIndicatorTooltipKey(attribute: ContactAttribute | null | undefined, context: AttributeIndicatorTooltipContext): AttributeIndicatorTooltipKey | null;
export declare function getAttributeIndicatorTooltipText(attribute: ContactAttribute | null | undefined, tooltips: AttributeIndicatorTooltips | null | undefined, context: AttributeIndicatorTooltipContext): string;
type MaybeRef<T> = T | Ref<T> | ComputedRef<T>;
/**
 * Параметры composable для работы с контактными атрибутами.
 */
type PanelChannelTypesRef = MaybeRef<readonly ChannelType[]>;
interface UseCommunicationAttributesOptions {
    /** Реактивный список контактных атрибутов */
    contactAttributes: MaybeRef<ContactAttribute[]>;
    /** Типы каналов, отображаемые в панели */
    panelChannelTypes: PanelChannelTypesRef;
    /** Текущий замороженный атрибут (подсвеченный) */
    frozenAttribute: Ref<{
        id?: string;
    } | null>;
}
/**
 * Формирует структуру организованных атрибутов.
 */
export declare function useCommunicationAttributes({ contactAttributes, panelChannelTypes, frozenAttribute, }: UseCommunicationAttributesOptions): {
    organizedContactAttributes: Ref<Record<string, ContactAttribute[]>, Record<string, ContactAttribute[]>>;
    organizeContactAttributes: () => void;
    isAttributeFrozen: (attribute: ContactAttribute | null | undefined) => boolean;
};
export {};
