import { Socket } from "socket.io-client";
import { ShowAlert } from "../../@types/types";
/**
 * Configuration for what each permission level can do.
 * Each capability can be: "allow" | "approval" | "disallow"
 */
export interface PermissionCapabilities {
    useMic: "allow" | "approval" | "disallow";
    useCamera: "allow" | "approval" | "disallow";
    useScreen: "allow" | "approval" | "disallow";
    useChat: "allow" | "disallow";
}
/**
 * Permission configuration for all levels.
 * Level "2" (host) always has full permissions - not configurable.
 */
export interface PermissionConfig {
    level0: PermissionCapabilities;
    level1: PermissionCapabilities;
}
export interface UpdatePermissionConfigOptions {
    socket: Socket;
    config: PermissionConfig;
    member: string;
    islevel: string;
    roomName: string;
    showAlert?: ShowAlert;
}
export type UpdatePermissionConfigType = (options: UpdatePermissionConfigOptions) => Promise<void>;
/**
 * Default permission configuration.
 */
export declare const getDefaultPermissionConfig: () => PermissionConfig;
/**
 * Creates a PermissionConfig from event settings.
 * This is useful when permissionConfig is not yet set, extracting initial values
 * from the room's event settings. Both level0 and level1 will have the same initial permissions.
 *
 * @param audioSetting - 'allow' | 'approval' | 'disallow'
 * @param videoSetting - 'allow' | 'approval' | 'disallow'
 * @param screenshareSetting - 'allow' | 'approval' | 'disallow'
 * @param chatSetting - 'allow' | 'disallow'
 * @returns PermissionConfig with both levels set to the same permissions
 */
export declare const getPermissionConfigFromEventSettings: (audioSetting?: string, videoSetting?: string, screenshareSetting?: string, chatSetting?: string) => PermissionConfig;
/**
 * Updates the permission configuration for the room.
 * Only hosts (islevel === "2") can update the configuration.
 *
 * @param {UpdatePermissionConfigOptions} options - Options for updating permission config.
 *
 * @example
 * ```typescript
 * await updatePermissionConfig({
 *   socket,
 *   config: {
 *     level0: { useMic: "disallow", useCamera: "disallow", useScreen: "disallow", useChat: "allow" },
 *     level1: { useMic: "allow", useCamera: "allow", useScreen: "allow", useChat: "allow" },
 *   },
 *   member: "currentUser",
 *   islevel: "2",
 *   roomName: "room123",
 *   showAlert: (alert) => console.log(alert.message),
 * });
 * ```
 */
export declare const updatePermissionConfig: ({ socket, config, member, islevel, roomName, showAlert, }: UpdatePermissionConfigOptions) => Promise<void>;
