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

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

const { Platform, NativeModules } = require('react-native'); //React Native

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

//Получение нативного модуля буфера обмена
const getNativeClipboard = () => {
    //Android: ClipboardModule
    if (Platform.OS === 'android') {
        return NativeModules.ClipboardModule || NativeModules.Clipboard;
    }

    //iOS: RCTClipboard
    if (Platform.OS === 'ios') {
        return NativeModules.RCTClipboard || NativeModules.Clipboard;
    }

    return null;
};

//Копирование текста в буфер обмена
const copyToClipboard = async text => {
    const value = String(text || '');

    //Web: используем navigator.clipboard
    if (Platform.OS === 'web') {
        if (typeof navigator !== 'undefined' && navigator.clipboard && typeof navigator.clipboard.writeText === 'function') {
            await navigator.clipboard.writeText(value);
            return true;
        }

        //Fallback для старых браузеров
        if (typeof document !== 'undefined') {
            const textArea = document.createElement('textarea');
            textArea.value = value;
            textArea.style.position = 'fixed';
            textArea.style.left = '-9999px';
            document.body.appendChild(textArea);
            textArea.select();
            const success = document.execCommand('copy');
            document.body.removeChild(textArea);
            return success;
        }

        throw new Error('Буфер обмена недоступен');
    }

    //Android/iOS: используем нативный модуль
    const nativeClipboard = getNativeClipboard();

    if (nativeClipboard) {
        //Пробуем разные методы
        if (typeof nativeClipboard.setString === 'function') {
            await nativeClipboard.setString(value);
            return true;
        }

        if (typeof nativeClipboard.setContent === 'function') {
            await nativeClipboard.setContent({ text: value });
            return true;
        }
    }

    throw new Error('Нативный модуль буфера обмена недоступен');
};

//Чтение текста из буфера обмена
const readFromClipboard = async () => {
    //Web: используем navigator.clipboard
    if (Platform.OS === 'web') {
        if (typeof navigator !== 'undefined' && navigator.clipboard && typeof navigator.clipboard.readText === 'function') {
            return await navigator.clipboard.readText();
        }

        throw new Error('Буфер обмена недоступен');
    }

    //Android/iOS: используем нативный модуль
    const nativeClipboard = getNativeClipboard();

    if (nativeClipboard) {
        if (typeof nativeClipboard.getString === 'function') {
            return await nativeClipboard.getString();
        }
    }

    throw new Error('Нативный модуль буфера обмена недоступен');
};

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

module.exports = {
    copyToClipboard,
    readFromClipboard
};
