import React from 'react';
import { Socket } from 'socket.io-client';
import { Poll, ShowAlert, HandleCreatePollType, HandleEndPollType, HandleVotePollType } from '../../@types/types';
/**
 * Configuration options for the PollModal component.
 *
 * @interface PollModalOptions
 *
 * **Modal Control:**
 * @property {boolean} isPollModalVisible - Controls modal visibility
 * @property {() => void} onClose - Callback when modal is closed
 * @property {(isVisible: boolean) => void} updateIsPollModalVisible - Updates modal visibility state
 *
 * **Poll Management:**
 * @property {Poll[]} polls - Array of all polls in the room
 * @property {Poll | null} poll - Currently active/selected poll
 * @property {HandleCreatePollType} handleCreatePoll - Handler for creating new polls (host/co-host only)
 * @property {HandleEndPollType} handleEndPoll - Handler for ending active polls (host/co-host only)
 * @property {HandleVotePollType} handleVotePoll - Handler for voting in polls
 *
 * **User Context:**
 * @property {string} member - Current user's name/ID
 * @property {string} islevel - User level ('0'=participant, '1'=co-host, '2'=host) - determines if create/end poll buttons are shown
 *
 * **Session Context:**
 * @property {Socket} socket - Socket.io instance for real-time poll synchronization
 * @property {string} roomName - Room identifier for poll events
 * @property {ShowAlert} [showAlert] - Alert display function for user feedback
 *
 * **Customization:**
 * @property {'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'center'} [position='topRight'] - Modal position on screen
 * @property {string} [backgroundColor='#83c0e9'] - Modal background color
 * @property {object} [style] - Additional custom styles for modal container
 *
 * **Advanced Render Overrides:**
 * @property {(options: { defaultContent: JSX.Element; dimensions: { width: number; height: number } }) => JSX.Element} [renderContent] - Custom render function for modal content
 * @property {(options: { defaultContainer: JSX.Element; dimensions: { width: number; height: number } }) => React.ReactNode} [renderContainer] - Custom render function for modal container
 */
export interface PollModalOptions {
    isPollModalVisible: boolean;
    onClose: () => void;
    position?: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'center';
    backgroundColor?: string;
    isDarkMode?: boolean;
    member: string;
    islevel: string;
    polls: Poll[];
    poll: Poll | null;
    socket: Socket;
    roomName: string;
    showAlert?: ShowAlert;
    updateIsPollModalVisible: (isVisible: boolean) => void;
    handleCreatePoll: HandleCreatePollType;
    handleEndPoll: HandleEndPollType;
    handleVotePoll: HandleVotePollType;
    /**
     * Optional custom style for the modal container.
     */
    style?: object;
    /**
     * Custom render function for modal content.
     */
    renderContent?: (options: {
        defaultContent: JSX.Element;
        dimensions: {
            width: number;
            height: number;
        };
    }) => JSX.Element;
    /**
     * Custom render function for the modal container.
     */
    renderContainer?: (options: {
        defaultContainer: JSX.Element;
        dimensions: {
            width: number;
            height: number;
        };
    }) => React.ReactNode;
}
export type PollModalType = (options: PollModalOptions) => JSX.Element;
/**
 * PollModal - Interactive polling and voting interface
 *
 * PollModal is a React Native component that provides a complete polling system
 * for meetings. Hosts/co-hosts can create polls with multiple options, participants
 * can vote, and results are displayed in real-time with vote counts and percentages.
 *
 * **Key Features:**
 * - Poll creation with custom question and multiple options (host/co-host only)
 * - Real-time voting for participants
 * - Live vote count and percentage display
 * - Poll history view (all active and inactive polls)
 * - End poll functionality (host/co-host only)
 * - Single vote per participant enforcement
 * - Socket.io synchronization for instant updates
 * - Position-configurable modal (5 positions)
 *
 * **UI Customization:**
 * This component can be replaced via `uiOverrides.pollModal` to
 * provide a completely custom polling interface.
 *
 * @component
 * @param {PollModalOptions} props - Configuration options
 *
 * @returns {JSX.Element} Rendered poll modal
 *
 * @example
 * ```tsx
 * // Host creating and managing polls
 * import React, { useState } from 'react';
 * import { PollModal } from 'mediasfu-reactnative-expo';
 * import { io } from 'socket.io-client';
 *
 * const socket = io('https://your-server.com');
 * const [showPolls, setShowPolls] = useState(false);
 *
 * const activePoll = {
 *   id: 'poll-1',
 *   question: 'What time works best?',
 *   options: ['Morning', 'Afternoon', 'Evening'],
 *   status: 'active',
 *   voters: { 'user1': 0, 'user2': 2 },
 *   votes: [1, 0, 1],
 * };
 *
 * return (
 *   <PollModal
 *     isPollModalVisible={showPolls}
 *     onClose={() => setShowPolls(false)}
 *     member="host-user"
 *     islevel="2" // Host - can create/end polls
 *     polls={[activePoll]}
 *     poll={activePoll}
 *     socket={socket}
 *     roomName="meeting-room-123"
 *     handleCreatePoll={handleCreatePoll}
 *     handleEndPoll={handleEndPoll}
 *     handleVotePoll={handleVotePoll}
 *     updateIsPollModalVisible={setShowPolls}
 *     showAlert={showCustomAlert}
 *   />
 * );
 * ```
 *
 * @example
 * ```tsx
 * // Participant voting in polls
 * return (
 *   <PollModal
 *     isPollModalVisible={isVisible}
 *     onClose={handleClose}
 *     member="participant-user"
 *     islevel="0" // Participant - can only vote
 *     polls={allPolls}
 *     poll={currentPoll}
 *     socket={socketConnection}
 *     roomName={roomId}
 *     handleCreatePoll={handleCreatePoll}
 *     handleEndPoll={handleEndPoll}
 *     handleVotePoll={handleVotePoll}
 *     updateIsPollModalVisible={setIsVisible}
 *     position="center"
 *     backgroundColor="#e8f5e9"
 *   />
 * );
 * ```
 *
 * @example
 * ```tsx
 * // Using custom UI via uiOverrides
 * const config = {
 *   uiOverrides: {
 *     pollModal: {
 *       component: MyCustomPollInterface,
 *       injectedProps: {
 *         theme: 'dark',
 *         allowAnonymousVoting: false,
 *       },
 *     },
 *   },
 * };
 *
 * return <MyMeetingComponent config={config} />;
 * ```
 */
declare const PollModal: React.FC<PollModalOptions>;
export default PollModal;
