{% extends 'web/base.html.twig' %}
{% block title %}Pitaj Slađanu – 2sweet.eu{% endblock %}
{% block body %}
{{ include('web/components/inner/breadcrumb.html.twig') }}
<div class="bgWhite">
<div class="container">
<div class="emptySpace-xs40 emptySpace80"></div>
<div class="row">
<div class="col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3" style="text-align:center;">
<img src="{{ asset('img/sweet.png') }}" alt="Slađana" style="height:60px; margin-bottom:20px;">
<h2 class="h2">Pitaj Slađanu</h2>
<div class="emptySpace15"></div>
<p class="normall" style="color:#888;">
Slađana je naša slatka asistentica — pitaj je sve o tortama, kolačima, cijenama i dostavi.
Za osobni upit, pošalji nam poruku direktno iz chata.
</p>
</div>
</div>
<div class="emptySpace-xs30 emptySpace50"></div>
<div class="row">
<div class="col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3">
<div id="sladana-embed" style="
background: #fff9f6;
border: 1px solid #ead7d2;
border-radius: 16px;
box-shadow: 0 10px 40px rgba(0,0,0,0.1);
overflow: hidden;
display: flex;
flex-direction: column;
height: 560px;
">
<div class="sibi-header" style="flex-shrink:0;">
<span>Slađana – slatka asistentica</span>
</div>
<div class="sibi-messages" id="page-sibi-messages" aria-live="polite" style="flex:1; overflow-y:auto;"></div>
<div class="sibi-quick" id="page-sibi-quick"></div>
<form class="sibi-form" id="page-sibi-form">
<input class="sibi-input" id="page-sibi-input" type="text" placeholder="Upiši poruku..." autocomplete="off" />
<button class="sibi-send" type="submit">Pošalji</button>
</form>
</div>
</div>
</div>
<div class="emptySpace-xs40 emptySpace80"></div>
</div>
</div>
<div class="footerSeparator"></div>
<div class="emptySpace-xs30 emptySpace50"></div>
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script>
// Inicijalizacija chata na zasebnoj stranici
(function () {
var sessionToken = null;
var isWaiting = false;
var inquiryFormVisible = false;
var messagesEl = document.getElementById('page-sibi-messages');
var quickEl = document.getElementById('page-sibi-quick');
var form = document.getElementById('page-sibi-form');
var input = document.getElementById('page-sibi-input');
if (!messagesEl) return;
function addMessage(text, who) {
var msg = document.createElement('div');
msg.className = 'sibi-message ' + who;
var bubble = document.createElement('div');
bubble.className = 'sibi-bubble';
bubble.textContent = text;
msg.appendChild(bubble);
messagesEl.appendChild(msg);
messagesEl.scrollTop = messagesEl.scrollHeight;
}
function showTyping() {
var el = document.createElement('div');
el.className = 'sibi-message bot sibi-typing';
el.id = 'page-typing';
el.innerHTML = '<div class="sibi-bubble"><span class="sibi-dot"></span><span class="sibi-dot"></span><span class="sibi-dot"></span></div>';
messagesEl.appendChild(el);
messagesEl.scrollTop = messagesEl.scrollHeight;
}
function hideTyping() {
var el = document.getElementById('page-typing');
if (el) el.parentNode.removeChild(el);
}
function ensureSession(cb) {
if (sessionToken) { cb(sessionToken); return; }
fetch('/chatbot/session', { method: 'POST', headers: { 'Content-Type': 'application/json' } })
.then(function (r) { return r.json(); })
.then(function (d) { sessionToken = d.session_token; cb(sessionToken); });
}
function setQuickReplies(items) {
quickEl.innerHTML = '';
items.forEach(function (item) {
if (item.href) {
var a = document.createElement('a');
a.href = item.href; a.textContent = item.label; a.rel = 'noopener';
quickEl.appendChild(a);
} else if (item.label === 'Pošalji upit') {
var btn = document.createElement('button');
btn.type = 'button'; btn.textContent = item.label;
btn.addEventListener('click', function () { openInquiryForm(); });
quickEl.appendChild(btn);
} else {
var btn2 = document.createElement('button');
btn2.type = 'button'; btn2.textContent = item.label;
btn2.addEventListener('click', function () { sendMessage(item.payload || item.label); });
quickEl.appendChild(btn2);
}
});
}
function sendMessage(text) {
if (!text || isWaiting || inquiryFormVisible) return;
var raw = text.trim();
if (!raw) return;
addMessage(raw, 'user');
quickEl.innerHTML = '';
isWaiting = true;
input.disabled = true;
showTyping();
ensureSession(function (token) {
fetch('/chatbot/message', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message: raw, session_token: token })
})
.then(function (r) { return r.json(); })
.then(function (d) {
hideTyping();
isWaiting = false;
input.disabled = false;
input.focus();
if (d.session_token) sessionToken = d.session_token;
if (d.response) addMessage(d.response, 'bot');
setQuickReplies([
{ label: 'Pošalji upit' },
{ label: 'Kalkulator', href: '/svadbeni-kalkulator' }
]);
})
.catch(function () {
hideTyping(); isWaiting = false; input.disabled = false;
addMessage('Ups, problem s vezom. Probaj ponovo! 😅', 'bot');
});
});
}
function openInquiryForm() {
if (inquiryFormVisible) return;
inquiryFormVisible = true;
var wrapper = document.createElement('div');
wrapper.className = 'sibi-inquiry-form';
wrapper.innerHTML = [
'<p class="sibi-inquiry-title">Pošalji upit majstorima 🍰</p>',
'<input type="text" class="sibi-inq-input" id="pinq-name" placeholder="Ime i prezime *" />',
'<input type="tel" class="sibi-inq-input" id="pinq-phone" placeholder="Broj mobitela *" />',
'<input type="email" class="sibi-inq-input" id="pinq-email" placeholder="Email *" />',
'<input type="text" class="sibi-inq-input" id="pinq-date-place" placeholder="Datum i mjesto isporuke" />',
'<input type="number" class="sibi-inq-input" id="pinq-guests" placeholder="Broj gostiju" min="1" />',
'<select class="sibi-inq-input" id="pinq-category">',
' <option value="">Prigoda...</option>',
' <option>Vjenčanje</option><option>Krštenje</option><option>Rođendan</option>',
' <option>Pričest / Krizma</option><option>Korporativni event</option><option>Ostalo</option>',
'</select>',
'<textarea class="sibi-inq-input" id="pinq-message" rows="3" placeholder="Opis torte ili kolača..."></textarea>',
'<div class="sibi-photo-upload">',
' <input type="file" id="pinq-photos" accept="image/*" multiple style="display:none;">',
' <label for="pinq-photos" class="sibi-inq-photo-label">📷 Dodaj fotografije (max 6)</label>',
' <div id="pinq-photos-preview" class="sibi-photos-preview"></div>',
'</div>',
'<div class="sibi-inq-actions">',
' <button type="button" id="pinq-submit" class="sibi-inq-btn-send">Pošalji upit 🚀</button>',
' <button type="button" id="pinq-cancel" class="sibi-inq-btn-cancel">Odustani</button>',
'</div>',
'<p class="sibi-inq-note">* Obavezna polja</p>',
].join('');
messagesEl.appendChild(wrapper);
messagesEl.scrollTop = messagesEl.scrollHeight;
wrapper.querySelector('#pinq-photos').addEventListener('change', function () {
var preview = document.getElementById('pinq-photos-preview');
preview.innerHTML = '';
Array.from(this.files).slice(0, 6).forEach(function (file) {
var reader = new FileReader();
reader.onload = function (e) {
var img = document.createElement('img'); img.src = e.target.result; preview.appendChild(img);
};
reader.readAsDataURL(file);
});
});
document.getElementById('pinq-cancel').addEventListener('click', function () {
wrapper.parentNode.removeChild(wrapper);
inquiryFormVisible = false;
setQuickReplies([{ label: 'Pošalji upit' }, { label: 'Kalkulator', href: '/svadbeni-kalkulator' }]);
});
document.getElementById('pinq-submit').addEventListener('click', function () {
var name = document.getElementById('pinq-name').value.trim();
var phone = document.getElementById('pinq-phone').value.trim();
var email = document.getElementById('pinq-email').value.trim();
if (!name || !phone || !email) { alert('Upiši ime, broj mobitela i email!'); return; }
var btn = document.getElementById('pinq-submit');
btn.disabled = true; btn.textContent = 'Šaljem...';
var fd = new FormData();
fd.append('name', name);
fd.append('phone', phone);
fd.append('email', email);
fd.append('date_place', document.getElementById('pinq-date-place').value.trim());
fd.append('guests', parseInt(document.getElementById('pinq-guests').value) || 0);
fd.append('category', document.getElementById('pinq-category').value);
fd.append('message', document.getElementById('pinq-message').value.trim());
fd.append('session_token', sessionToken || '');
var photoInput = document.getElementById('pinq-photos');
if (photoInput && photoInput.files.length > 0) {
Array.from(photoInput.files).slice(0, 6).forEach(function (f) { fd.append('photos[]', f); });
}
fetch('/chatbot/inquiry', { method: 'POST', body: fd })
.then(function (r) {
if (!r.ok) { throw new Error('server'); }
return r.json();
})
.then(function (d) {
wrapper.parentNode.removeChild(wrapper);
inquiryFormVisible = false;
addMessage(d.message || 'Upit poslan! Javimo se uskoro. 🍰', 'bot');
})
.catch(function () {
btn.disabled = false; btn.textContent = 'Pošalji upit 🚀';
alert('Greška pri slanju. Pokušaj ponovo.');
});
});
}
// Pozdrav
addMessage('Bok! Ja sam Slađana, tvoja slatka asistentica iz 2sweet slastičarnice. 🍰', 'bot');
addMessage('Tu sam da ti pomognem odabrati savršenu tortu ili kolače za tvoj poseban dan.', 'bot');
addMessage('O čemu se radi?', 'bot');
setQuickReplies([
{ label: 'Svadbena torta' },
{ label: 'Torta za posebnu prigodu' },
{ label: 'Kolači i desert stol' },
{ label: 'Cijena i dostava' },
{ label: 'Pošalji upit' }
]);
form.addEventListener('submit', function (e) {
e.preventDefault();
var val = input.value;
input.value = '';
sendMessage(val);
});
})();
</script>
{% endblock %}