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

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

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

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

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

    const handleFocus = () => setIsFocused(true);
    const handleBlur = () => setIsFocused(false);

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

            <TextInput
                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}
                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>
            )}
        </View>
    );
}

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

module.exports = AppInput;
