/*
    Предрейсовые осмотры - мобильное приложение
    Утилиты для адаптивного дизайна
*/

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

const { Dimensions, Platform, PixelRatio } = require('react-native'); //Размеры экрана и платформа
const { BASE_WIDTH, BASE_HEIGHT } = require('../config/responsiveConfig'); //Базовые размеры для адаптивности

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

//Получение размеров экрана
const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } = Dimensions.get('window');

//Проверка на старые устройства Android
const isLegacyAndroid = () => {
    return Platform.OS === 'android' && Platform.Version < 26; // Android 8.0 = API 26
};

//Нормализация размера для разных плотностей пикселей
const normalize = (size, based = 'width') => {
    const scale = based === 'height' ? SCREEN_HEIGHT / BASE_HEIGHT : SCREEN_WIDTH / BASE_WIDTH;

    const newSize = size * scale;

    //Для старых Android используем более простую нормализацию
    if (isLegacyAndroid()) {
        return Math.round(newSize);
    }

    if (Platform.OS === 'ios') {
        return Math.round(PixelRatio.roundToNearestPixel(newSize));
    } else {
        return Math.round(PixelRatio.roundToNearestPixel(newSize)) - 2;
    }
};

//Адаптивная ширина (по ширине экрана)
const responsiveWidth = size => normalize(size, 'width');

//Адаптивная высота (по высоте экрана)
const responsiveHeight = size => normalize(size, 'height');

//Адаптивный размер (интеллектуальное масштабирование)
const responsiveSize = size => {
    const widthScale = SCREEN_WIDTH / BASE_WIDTH;
    const heightScale = SCREEN_HEIGHT / BASE_HEIGHT;
    const scale = Math.min(widthScale, heightScale);

    const newSize = size * scale;

    //Для старых Android используем более простую нормализацию
    if (isLegacyAndroid()) {
        return Math.round(newSize);
    }

    if (Platform.OS === 'ios') {
        return Math.round(PixelRatio.roundToNearestPixel(newSize));
    } else {
        return Math.round(PixelRatio.roundToNearestPixel(newSize));
    }
};

//Процент от ширины экрана
const widthPercentage = percent => {
    return Math.round((SCREEN_WIDTH * percent) / 100);
};

//Процент от высоты экрана
const heightPercentage = percent => {
    return Math.round((SCREEN_HEIGHT * percent) / 100);
};

//Проверка на планшет
const isTablet = () => {
    const aspectRatio = SCREEN_WIDTH / SCREEN_HEIGHT;
    return (
        (Platform.OS === 'ios' && Platform.isPad) ||
        (SCREEN_WIDTH >= 768 && SCREEN_HEIGHT >= 1024) ||
        aspectRatio <= 0.6 ||
        (SCREEN_WIDTH > 600 && SCREEN_HEIGHT > 600)
    );
};

//Проверка на маленький экран (меньше iPhone SE)
const isSmallScreen = () => {
    return SCREEN_WIDTH < 375;
};

//Проверка на большой экран (больше планшетов)
const isLargeScreen = () => {
    return SCREEN_WIDTH > 768;
};

//Адаптивный отступ
const responsiveSpacing = (size = 1) => {
    const baseSpacing = 4; // 4px базовый отступ
    return responsiveSize(baseSpacing * size);
};

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

module.exports = {
    responsiveWidth,
    responsiveHeight,
    responsiveSize,
    responsiveSpacing,
    widthPercentage,
    heightPercentage,
    isTablet,
    isSmallScreen,
    isLargeScreen,
    isLegacyAndroid,
    SCREEN_WIDTH,
    SCREEN_HEIGHT,
    normalize
};
