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

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

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

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

//Адаптивный компонент ввода (с поддержкой ref для фокуса)
const AppInput = React.forwardRef(function AppInput(
    {
        label,
        value,
        onChangeText,
        placeholder,
        secureTextEntry = false,
        keyboardType = 'default',
        autoCapitalize = 'none',
        error,
        helperText,
        disabled = false,
        style,
        inputStyle,
        labelStyle,
        ...restProps
    },
    ref
) {
    const [isFocused, setIsFocused] = React.useState(false);

    //Обработчик фокуса
    const handleFocus = React.useCallback(() => {
        setIsFocused(true);
    }, []);

    //Обработчик потери фокуса
    const handleBlur = React.useCallback(() => {
        setIsFocused(false);
    }, []);

    return (
        <View style={[styles.container, style]}>
            {label ? (
                <AppText style={[styles.label, labelStyle]} variant="caption" weight="medium">
                    {label}
                </AppText>
            ) : null}

            <TextInput
                ref={ref}
                style={[styles.input, isFocused && styles.inputFocused, error && styles.inputError, disabled && styles.inputDisabled, inputStyle]}
                value={value}
                onChangeText={onChangeText}
                placeholder={placeholder}
                placeholderTextColor={styles.placeholder.color}
                secureTextEntry={secureTextEntry}
                keyboardType={keyboardType}
                autoCapitalize={autoCapitalize}
                autoFocus={false}
                editable={!disabled}
                onFocus={handleFocus}
                onBlur={handleBlur}
                accessible={true}
                accessibilityLabel={label || placeholder}
                accessibilityRole="text"
                {...restProps}
            />

            {error || helperText ? (
                <AppText style={[styles.helperText, error && styles.helperTextError]} variant="caption">
                    {error || helperText}
                </AppText>
            ) : null}
        </View>
    );
});

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

module.exports = AppInput;
