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

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

const { AUTH_FORM_FIELD_ORDER } = require('../config/authFormFieldsConfig'); //Порядок полей формы
const { resolveScanTarget, getNextInOrder } = require('./scanInputTargetResolver'); //Резолвер цели для сканера

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

//Проверка доступности поля по опциям (видимость и редактируемость)
function isFieldAllowed(fieldId, options) {
    if (!options || typeof options !== 'object') return false;
    const { serverVisible, serverEditable, loginEditable, passwordEditable } = options;
    if (fieldId === 'server') return Boolean(serverVisible && serverEditable);
    if (fieldId === 'login') return Boolean(loginEditable);
    if (fieldId === 'password') return Boolean(passwordEditable);
    return false;
}

//Возвращает список идентификаторов полей формы, доступных для ввода (видимых и не заблокированных)
function getAllowedAuthFields(options) {
    if (!options || typeof options !== 'object') {
        return [];
    }
    return AUTH_FORM_FIELD_ORDER.filter(fieldId => isFieldAllowed(fieldId, options));
}

//Возвращает идентификатор следующего поля после текущего в списке доступных, либо null (после последнего — отправка формы)
function getNextAuthField(currentFieldId, allowedFields) {
    return getNextInOrder(currentFieldId, allowedFields);
}

//Определяет поле для первого сегмента сканера
function getScannerInitialTarget(focusedFieldId, allowedFields) {
    return resolveScanTarget(focusedFieldId, allowedFields);
}

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

module.exports = {
    getAllowedAuthFields,
    getNextAuthField,
    getScannerInitialTarget
};
