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

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

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

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

//Список осмотров
function InspectionList({ inspections, isLoading, error, onRefresh }) {
    const hasData = Array.isArray(inspections) && inspections.length > 0;

    const renderItem = React.useCallback(({ item }) => <InspectionItem item={item} />, []);

    const keyExtractor = React.useCallback(item => item.id, []);

    const handleRefresh = React.useCallback(() => {
        if (typeof onRefresh === 'function') onRefresh();
    }, [onRefresh]);

    if (!hasData && isLoading) {
        return (
            <View style={styles.centerContainer}>
                <ActivityIndicator size="small" color={styles.indicator.color} />
                <AppText style={styles.centerText}>Загружаем данные...</AppText>
            </View>
        );
    }

    if (!hasData && !isLoading) {
        return (
            <View style={styles.centerContainer}>
                <AppText style={styles.centerText}>Нет данных предрейсовых осмотров</AppText>
                {error ? <AppText style={styles.errorText}>{error}</AppText> : null}
                <View style={styles.centerButton}>
                    <AppButton title="Обновить" onPress={handleRefresh} />
                </View>
            </View>
        );
    }

    return (
        <FlatList
            data={inspections}
            keyExtractor={keyExtractor}
            renderItem={renderItem}
            refreshControl={<RefreshControl refreshing={!!isLoading} onRefresh={handleRefresh} />}
        />
    );
}

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

module.exports = InspectionList;
