export type Avatar = {
    id: string;
    name: string;
    avatar: string;
    isActive: boolean;
}

export type User = {
    id: string;
    name: string;
    email?: string;
    avatar?: string;
    isActive?: boolean;
    role?: string;
}

export type FilterUsersProps = {
    avatars?: Avatar[];
    usersList?: User[];
    selectedUsers?: User[];
    onSelectUsers?: (selectedUsers: User[]) => void;
    panelTitle?: string;
    max?: number;
    spacing?: number;
    size?: "small" | "medium" | "large";
    variant?: "circular" | "rounded" | "square";
    className?: string;
    onClick?: (userId: string) => void;
    onClickShowMore?: (surplus: number) => void;
    isShowVisible?: boolean;
    fetchMoreUsers?: () => Promise<{users: User[], hasMore: boolean}>;
    searchUsers?: (query: string) => Promise<{users: User[], hasMore: boolean}>;
    title?: string;
    surplus?: number;
    messageLoading?: string;
    placeholderInputSearch?: string;
}

export type AvatarsListProps = {
    avatars: Avatar[];
    max?: number;
    spacing?: number;
    size?: "small" | "medium" | "large";
    variant?: "circular" | "rounded" | "square";
    className?: string;
    onClick?: (avatar: string) => void;
    onClickShowMore?: (surplus: number) => void;
    selectedAvatarIds?: string[];
    isPanelVisible?: boolean;
}

export type PanelListProps = {
    usersList: User[];
    selectedUsers: User[];
    onSelectUsers: (selectedUsers: User[]) => void;
    className?: string;
    title?: string;
    isShowVisible?: boolean;
    fetchMoreUsers?: () => Promise<{users: User[], hasMore: boolean}>;
    searchUsers?: (query: string) => Promise<{users: User[], hasMore: boolean}>;
    messageLoading?: string;
    placeholderInputSearch?: string;
}

export type UserAvatarsListProps = {
    users: User[];
    max?: number;
    spacing?: number;
    size?: "small" | "medium" | "large";
    variant?: "circular" | "rounded" | "square";
    className?: string;
    onClick?: (userId: string) => void;
    onClickShowMore?: (surplus: number) => void;
    selectedUserIds?: string[];
    isPanelVisible?: boolean;
    surplus?: number;
}