/*
    Предрейсовые осмотры - мобильное приложение
    Общий компонент кнопки
*/

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

const React = require('react'); //React
const { Pressable, View } = require('react-native'); //Базовые компоненты
const AppText = require('./AppText'); //Общий текстовый компонент
const styles = require('../../styles/common/AppButton.styles'); //Стили кнопки

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

//Стиль кнопки в зависимости от состояния нажатия
function getAppButtonPressableStyle(stylesRef, disabled, style) {
    return function styleFn({ pressed }) {
        return [stylesRef.base, disabled && stylesRef.disabled, pressed && !disabled && stylesRef.pressed, style];
    };
}

//Общая кнопка приложения
function AppButton({ title, onPress, disabled = false, style, textStyle }) {
    const handlePress = React.useCallback(() => {
        if (!disabled && typeof onPress === 'function') onPress();
    }, [disabled, onPress]);

    const getPressableStyle = React.useMemo(() => getAppButtonPressableStyle(styles, disabled, style), [disabled, style]);

    return (
        <Pressable onPress={handlePress} disabled={disabled} style={getPressableStyle}>
            <View style={styles.content}>
                <AppText style={[styles.text, textStyle]}>{title}</AppText>
            </View>
        </Pressable>
    );
}

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

module.exports = AppButton;
