export interface TicketEngagementFile {
    id: string;
    name: string | null;
    url: string | null;
    mime: string | null;
    size: number | null;
}
export interface TicketEngagement {
    id: string;
    body: string | null;
    authorId: string | null;
    /** Whether this engagement is customer-authored (Custom Channels
     *  Messages — INCOMING direction) or team-authored (Notes + future
     *  OUTGOING messages). Drives avatar variant + the "Customer"/"Support
     *  team" header label in the drawer's conversation thread. */
    authorRole: 'customer' | 'support';
    /** Display name. Server resolves it differently per role:
     *    - `support` (Notes) → HubSpot owner id is resolved to an owner
     *      email, then matched against our `profiles` table; the matched
     *      employee's `full_name` is returned here. Null when the owner
     *      isn't a known Flamingo employee.
     *    - `customer` (Conversations messages) → null on new messages
     *      (drawer renders identity.user.name LIVE for the current
     *      user's own messages). Set only on legacy rows from earlier
     *      migrations. */
    authorName: string | null;
    /** Resolved author email — for `support` it's the HubSpot owner's
     *  email; for `customer` it's the message sender. Used by the
     *  drawer to cross-check "is this me?" against `identity.user.email`. */
    authorEmail: string | null;
    /** Avatar URL. For `support`, resolved from the matched `profiles`
     *  row's `avatar_url`. Null when the owner isn't a known Flamingo
     *  employee. For `customer`, always null on the wire (drawer reads
     *  identity.user.avatarUrl live for own messages). */
    authorAvatarUrl: string | null;
    createdAt: string;
    attachments: TicketEngagementFile[];
}
export interface UseTicketEngagementsReturn {
    engagements: TicketEngagement[];
    isLoading: boolean;
    isFetching: boolean;
    error: Error | null;
    refetch: () => void;
}
export declare function useTicketEngagements(externalTicketId: string | null | undefined, enabled?: boolean, 
/** Poll cadence (ms) for live conversation refresh while the drawer is
 *  open. The drawer only mounts this hook when expanded, so a constant
 *  here is already gated to "drawer open" — closing the drawer unmounts
 *  the panel and the polling stops. `false`/undefined disables it (the
 *  default, preserving prior fetch-once-per-open behavior for any other
 *  caller). Mirrors `useTicketsList.refetchInterval`; see
 *  `TICKET_LIVE_POLL_MS`. */
refetchInterval?: number | false): UseTicketEngagementsReturn;
//# sourceMappingURL=use-ticket-engagements.d.ts.map