(function () {
var settings = window.SOFITO_CHECK_SETTINGS || {};
var proxyUrl = settings.proxyUrl || 'https://api.sofito.ru/product-check.php';
var proxyKey = settings.proxyKey || window.SOFITO_CHECK_PROXY_KEY || '';
var stateNodes = {
loading: document.querySelector('[data-state="loading"]'),
success: document.querySelector('[data-state="success"]'),
notFound: document.querySelector('[data-state="not-found"]'),
error: document.querySelector('[data-state="server-error"]')
};
function getProductCode() {
var params = new URLSearchParams(window.location.search);
var code = params.get('code') || params.get('id') || '';
return code.trim().replace(/[^a-zA-Z0-9_-]/g, '').toUpperCase();
}
function setState(name) {
Object.keys(stateNodes).forEach(function (key) {
if (stateNodes[key]) {
stateNodes[key].hidden = key !== name;
}
});
}
function text(value, fallback) {
if (value === null || value === undefined || value === '') {
return fallback || '-';
}
return String(value);
}
function fillField(path, value) {
var nodes = document.querySelectorAll('[data-field="' + path + '"]');
nodes.forEach(function (node) {
node.textContent = text(value);
});
}
function fillAction(action, url) {
var nodes = document.querySelectorAll('[data-action="' + action + '"]');
nodes.forEach(function (node) {
if (!url) {
node.hidden = true;
return;
}
node.hidden = false;
if (node.tagName.toLowerCase() === 'a') {
node.href = url;
}
});
}
function fillPage(data) {
var product = data.product || {};
var dealer = data.dealer || {};
var actions = data.actions || {};
fillField('manufacturer', product.material_manufacturer);
fillField('material', product.material);
fillField('texture', product.texture);
fillField('color', product.color);
fillField('production_date', product.production_date);
fillField('dealer', dealer.name);
fillField('contacts', dealer.city + (dealer.phone ? ', ' + dealer.phone : ''));
fillAction('contact-dealer', actions.contact_url);
fillAction('order-new', actions.repeat_order_url);
fillAction('share', actions.share_url || window.location.href);
fillAction('review', actions.review_url);
fillAction('consult', actions.consultation_url);
}
function buildUrl(code) {
var url = new URL(proxyUrl);
url.searchParams.set('code', code);
if (proxyKey) {
url.searchParams.set('key', proxyKey);
}
return url.toString();
}
function showBadCode() {
setState('notFound');
}
function loadProduct() {
var code = getProductCode();
if (!code) {
showBadCode();
return;
}
setState('loading');
fetch(buildUrl(code), {
method: 'GET',
headers: {
'Accept': 'application/json'
}
})
.then(function (response) {
return response.json().then(function (data) {
return {
ok: response.ok,
status: response.status,
data: data
};
});
})
.then(function (result) {
var data = result.data || {};
if (result.ok && data.ok) {
fillPage(data);
setState('success');
return;
}
if (result.status === 404 || data.status === 'not_found') {
setState('notFound');
return;
}
setState('error');
})
.catch(function () {
setState('error');
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', loadProduct);
} else {
loadProduct();
}
})();