import { confirmIcon } from './constants.js';
import { apiBaseUrl, output } from './main.js';
import { t, onLanguageChange } from './i18n.js';
const feedbackButton = document.getElementById('btn-feedback-face-check');
const closeFeedback = document.getElementById('close-feedback-1765253515534');
const liveChat = document.getElementById('live-chat-1765253515534');
const feedbackContainer = document.getElementById('feedback-1765253515534');
const blockNotification = document.getElementById(
'block-notification-1765336324468'
);
const blockQuestion = document.getElementById('block-question-1765336324468');
const footerFeedback = document.getElementById('footer-feedback-1765336324468');
const REQUIRED_QUESTION_IDS = ['q1', 'q2'];
const isSuccess = {};
const isLoading = {};
const isFailed = {};
let isLoadingInternal = false;
function updateFeedbackButtonLabel() {
if (!feedbackButton) return;
feedbackButton.innerText = isLoadingInternal
? t('sendingLabel')
: t('sendButton');
}
onLanguageChange(() => {
updateFeedbackButtonLabel();
});
function areRequiredQuestionsAnswered() {
return REQUIRED_QUESTION_IDS.every((id) =>
document.querySelector(`#${id} input[type="radio"]:checked`)
);
}
function syncFeedbackButtonState() {
const missingRequired = !areRequiredQuestionsAnswered();
const shouldDisable = isLoadingInternal || missingRequired;
if (feedbackButton) {
feedbackButton.disabled = shouldDisable;
feedbackButton.classList.toggle('btn-disabled', shouldDisable);
feedbackButton.classList.toggle('disable', shouldDisable);
}
}
Object.defineProperty(isSuccess, 'value', {
set(newValue) {
if (newValue) {
if (blockNotification) {
const contentSentSuccessfully = `
${confirmIcon}
${t('feedbackSuccess')}
`;
blockNotification.innerHTML = contentSentSuccessfully;
blockNotification.classList.remove('display-none');
feedbackButton.disabled = true;
feedbackButton.classList.add('btn-disabled', 'disable');
footerFeedback.classList.add('display-none');
}
if (blockQuestion) {
blockQuestion.classList.add('display-none');
}
} else {
blockNotification.classList.add('display-none');
blockQuestion.classList.remove('display-none');
blockNotification.innerHTML = '';
syncFeedbackButtonState();
footerFeedback.classList.remove('display-none');
}
this._value = newValue;
},
get() {
return this._value;
},
});
Object.defineProperty(isLoading, 'value', {
set(newValue) {
isLoadingInternal = newValue;
updateFeedbackButtonLabel();
this._value = newValue;
syncFeedbackButtonState();
},
get() {
return this._value;
},
});
function resetFeedbackForm() {
const radios = document.querySelectorAll('.question input[type="radio"]');
const textareas = document.querySelectorAll('.feedback textarea');
const stars = document.querySelectorAll('.options-stars .star');
radios.forEach((radio) => {
radio.checked = false;
});
textareas.forEach((textarea) => {
textarea.value = '';
});
stars.forEach((star) => {
star.classList.remove('active');
});
syncFeedbackButtonState();
}
function assignRadioValues() {
const enValues = {
q0: [
'Journalist / Fact Checker',
'Researcher / Student',
'Law Enforcement / OSINT',
'General User',
],
q1: [
'Spot on',
'Mostly correct',
'Mixed results',
'Missed key context',
'Completely wrong',
],
q2: [
'Yes',
'No - It was actually Real',
'No - It was actually AI-Generated',
],
q3: [
'All links worked and were relevant',
'Some links were broken/dead',
'Links were unrelated to the topic',
],
q4: [
'No issues',
'Invented dates/times',
'Invented people/names',
"Citations that don't exist",
],
q5: [
'Very Clear',
'Clear',
'Moderately Clear',
'Slightly Clear',
'Not Clear',
],
q6: ['Yes', 'Partially', 'No'],
q7: [
'Very Clear',
'Clear',
'Moderately Clear',
'Slightly Clear',
'Not Clear',
],
q8: ['Yes', 'Not Applicable', 'No'],
q9: [
'Clearly Explained',
'Well Explained',
'Moderately Explained',
'Poorly Explained',
'Not Explained',
],
};
const questions = document.querySelectorAll('.question');
questions.forEach((question) => {
const questionId = question.id;
const options = question.querySelectorAll('.option');
options.forEach((option, index) => {
const radio = option.querySelector('input[type="radio"]');
if (!radio) return;
const enList = enValues[questionId];
if (enList && enList[index]) {
radio.value = enList[index];
return;
}
// Fallbacks if question not mapped
if (questionId === '') {
radio.value = String(index + 1);
} else {
const optionText = option
.querySelector('.option-text')
?.textContent?.trim();
radio.value = optionText || radio.value || String(index + 1);
}
});
});
}
function initializeStarRatings() {
const starGroups = document.querySelectorAll('.options-stars');
starGroups.forEach((group) => {
const options = Array.from(group.querySelectorAll('.option'));
const radios = options
.map((option) => option.querySelector('input[type="radio"]'))
.filter(Boolean);
const stars = options
.map((option) => option.querySelector('.star'))
.filter(Boolean);
const updateStars = (activeIndex) => {
stars.forEach((star, index) => {
star.classList.toggle('active', index <= activeIndex);
});
};
if (radios.length === 0 || stars.length === 0) {
return;
}
radios.forEach((radio, index) => {
radio.value = radio.value || String(index + 1);
radio.addEventListener('change', () => {
updateStars(index);
});
if (radio.checked) {
updateStars(index);
}
});
if (!radios.some((radio) => radio.checked)) {
updateStars(-1);
}
});
}
function collectFeedbackData() {
const responses = {};
const questions = document.querySelectorAll('.question');
questions.forEach((question) => {
if (!question.id) return;
const radios = question.querySelectorAll('input[type="radio"]');
const selected = question.querySelector('input[type="radio"]:checked');
const textarea = question.querySelector('textarea');
if (radios.length > 0) {
if (!selected) {
responses[question.id] = '-';
} else {
let value = selected.value;
if (!value) {
const optionText = selected
.closest('.opt')
?.querySelector('.option-text')
?.textContent?.trim();
value = optionText || '-';
}
responses[question.id] = value;
}
if (textarea) {
const textValue = textarea.value.trim();
responses[`${question.id}_comments`] = textValue || '-';
}
} else if (textarea) {
const textValue = textarea.value.trim();
responses[question.id] = textValue || '-';
} else {
responses[question.id] = '-';
}
});
return responses;
}
async function handleFeedbackSubmit(event) {
event.preventDefault();
if (!areRequiredQuestionsAnswered()) {
syncFeedbackButtonState();
return;
}
isLoading.value = true;
// Simulate async feedback submission
const feedbackData = collectFeedbackData();
const _output = `${output?.readme_content?.case_summary?.title || ''}${
output?.readme_content?.case_summary?.content || ''
}${output?.readme_content?.content_classification?.title || ''}${
output?.readme_content?.content_classification?.content || ''
}${output?.readme_content?.verified_evidence?.title || ''}
${output?.readme_content?.verified_evidence?.source_details?.title || ''}${
output?.readme_content?.verified_evidence?.source_details?.content || ''
}${output?.readme_content?.verified_evidence?.where?.title || ''}${
output?.readme_content?.verified_evidence?.where?.content || ''
}${output?.readme_content?.verified_evidence?.when?.title || ''}${
output?.readme_content?.verified_evidence?.when?.content || ''
}${output?.readme_content?.verified_evidence?.who?.title || ''}${
output?.readme_content?.verified_evidence?.who?.content || ''
}${output?.readme_content?.verified_evidence?.why?.title || ''}${
output?.readme_content?.verified_evidence?.why?.content || ''
}${output?.readme_content?.forensic_analysis?.title || ''}${
output?.readme_content?.forensic_analysis?.content || ''
}${output?.readme_content?.other_evidence?.title || ''}${
output?.readme_content?.other_evidence?.content || ''
}
`;
feedbackData['q11'] = _output.trim().length > 0 ? _output.trim() : '-';
axios
.post(apiBaseUrl + 'v1/survey', feedbackData, {
headers: {
'Content-Type': 'application/json',
},
})
.then((response) => {
console.log('Feedback submitted successfully:', response.data);
isLoading.value = false;
resetFeedbackForm();
isSuccess.value = true;
})
.catch((error) => {
console.error('Error submitting feedback:', error);
isLoading.value = false;
isFailed.value = true;
});
}
assignRadioValues();
initializeStarRatings();
syncFeedbackButtonState();
const requiredRadios = document.querySelectorAll(
'#q1 input[type="radio"], #q2 input[type="radio"]'
);
requiredRadios.forEach((radio) => {
radio.addEventListener('change', () => {
syncFeedbackButtonState();
});
});
if (feedbackButton) {
feedbackButton.addEventListener('click', handleFeedbackSubmit);
}
updateFeedbackButtonLabel();
window.collectFeedbackData = collectFeedbackData;
closeFeedback.addEventListener('click', () => {
if (feedbackContainer) {
feedbackContainer.classList.add('display-none');
liveChat.classList.remove('display-none');
isLoading.value = false;
isFailed.value = false;
isSuccess.value = false;
}
});
liveChat.addEventListener('click', () => {
if (feedbackContainer) {
feedbackContainer.classList.remove('display-none');
liveChat.classList.add('display-none');
}
});