import { PeerOptions } from 'peerjs';
export { PeerOptions } from 'peerjs';
import { CSSProperties, DetailedHTMLProps, HTMLAttributes, ReactNode } from 'react';

type Message = {
    id: string;
    text: string;
};
type MessageEvent = (message: Message) => void;

type RemotePeerId = string | string[];
type useChatProps = {
    name?: string;
    peerId: string;
    remotePeerId?: RemotePeerId;
    text?: boolean;
    recoverChat?: boolean;
    audio?: boolean;
    peerOptions?: PeerOptions;
    onError?: Function;
    onMicError?: Function;
    onMessageSent?: MessageEvent;
    onMessageReceived?: MessageEvent;
};
type IconProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;
type RemotePeers = {
    [id: string]: string;
};
type Children = (childrenOptions: ChildrenOptions) => ReactNode;
type ChildrenOptions = {
    remotePeers?: RemotePeers;
    messages?: Message[];
    sendMessage?: (message: Message) => void;
    audio?: boolean;
    setAudio?: (audio: boolean) => void;
};
type ChatProps = useChatProps & {
    dialogOptions?: DialogOptions;
    props?: DivProps;
    children?: Children;
};
type DialogOptions = {
    position?: DialogPosition;
    style?: CSSProperties;
};
type DialogPosition = "left" | "center" | "right";
type DivProps = DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;

export type { ChatProps, Children, ChildrenOptions, DialogOptions, DialogPosition, DivProps, IconProps, Message, MessageEvent, RemotePeerId, RemotePeers, useChatProps };
