/*
    Предрейсовые осмотры - мобильное приложение
    Компонент списка элементов меню
*/

//---------------------
//Подключение библиотек
//---------------------

const React = require('react'); //React
const { ScrollView, View } = require('react-native'); //Базовые компоненты
const MenuItem = require('./MenuItem'); //Элемент меню
const EmptyMenu = require('./EmptyMenu'); //Пустое меню
const MenuDivider = require('./MenuDivider'); //Разделитель меню
const styles = require('../../styles/menu/MenuList.styles'); //Стили списка меню

//-----------
//Тело модуля
//-----------

//Строка меню с элементом
function MenuItemRow({ item, index, items, onItemPress }) {
    const handlePress = React.useCallback(() => {
        onItemPress(item);
    }, [item, onItemPress]);

    return (
        <View>
            <MenuItem
                title={item.title}
                icon={item.icon}
                onPress={handlePress}
                isDestructive={item.isDestructive}
                disabled={item.disabled}
                style={item.style}
                textStyle={item.textStyle}
            />
            {item.showDivider && index < items.length - 1 && <MenuDivider />}
        </View>
    );
}

//Список элементов меню
function MenuList({ items = [], onClose, style }) {
    const handleItemPress = React.useCallback(
        item => {
            if (typeof onClose === 'function') {
                onClose();
            }
            if (typeof item.onPress === 'function') {
                item.onPress();
            }
        },
        [onClose]
    );

    if (!Array.isArray(items) || items.length === 0) {
        return <EmptyMenu />;
    }

    return (
        <ScrollView style={[styles.scrollView, style]} showsVerticalScrollIndicator={false} bounces={false}>
            {items.map((item, index) => {
                //Элемент-разделитель
                if (item.type === 'divider') {
                    return <MenuDivider key={item.id || `menu-divider-${index}`} />;
                }

                //Обычный элемент меню
                return <MenuItemRow key={item.id || `menu-item-${index}`} item={item} index={index} items={items} onItemPress={handleItemPress} />;
            })}
        </ScrollView>
    );
}

//----------------
//Интерфейс модуля
//----------------

module.exports = MenuList;
