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

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

const React = require('react'); //React
const { View, Pressable } = require('react-native'); //Базовые компоненты
const { copyToClipboard } = require('../../utils/clipboard'); //Утилита буфера обмена
const styles = require('../../styles/common/CopyButton.styles'); //Стили кнопки копирования

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

//Иконка копирования
function CopyIcon() {
    return (
        <View style={styles.iconContainer}>
            <View style={styles.iconBack} />
            <View style={styles.iconFront} />
        </View>
    );
}

//Стиль кнопки копирования при нажатии
function getCopyButtonPressableStyle(stylesRef, disabled, style) {
    return function styleFn({ pressed }) {
        return [stylesRef.button, pressed && !disabled && stylesRef.buttonPressed, disabled && stylesRef.buttonDisabled, style];
    };
}

//Кнопка копирования в буфер обмена
function CopyButton({ value, onCopy, onError, disabled = false, style }) {
    //Обработчик нажатия
    const handlePress = React.useCallback(async () => {
        if (disabled || !value) {
            return;
        }

        try {
            await copyToClipboard(String(value));

            if (typeof onCopy === 'function') {
                onCopy(value);
            }
        } catch (error) {
            console.error('Ошибка копирования в буфер:', error);

            if (typeof onError === 'function') {
                onError(error);
            }
        }
    }, [value, disabled, onCopy, onError]);

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

    return (
        <Pressable
            accessibilityRole="button"
            accessibilityLabel="Копировать в буфер обмена"
            style={getPressableStyle}
            onPress={handlePress}
            disabled={disabled}
        >
            <CopyIcon />
        </Pressable>
    );
}

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

module.exports = CopyButton;
