/* ============================================================ BAN YARO — Ernährung Tabs: Kalorien-Rechner | Futter-Guide | Giftliste | KI-Berater ============================================================ */ window.Page_ernaehrung = (() => { let _container = null; let _appState = null; let _activeTab = 'rechner'; let _profil = {}; const TABS = [ { key: 'rechner', label: 'Kalorien', icon: '' }, { key: 'guide', label: 'Futter-Guide', icon: '' }, { key: 'gift', label: 'Giftliste', icon: '' }, { key: 'ki', label: 'KI-Berater', icon: '' }, ]; // ------------------------------------------------------------------ // Escape helper // ------------------------------------------------------------------ function _esc(s) { if (s == null) return ''; return String(s) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"'); } // ------------------------------------------------------------------ // LIFECYCLE // ------------------------------------------------------------------ async function init(container, appState, params) { _container = container; _appState = appState; if (params?.tab && TABS.some(t => t.key === params.tab)) { _activeTab = params.tab; } await _render(); } async function refresh() { await _render(); } async function onDogChange() { _profil = {}; await _render(); } // ------------------------------------------------------------------ // RENDER // ------------------------------------------------------------------ async function _render() { if (!_appState.activeDog) { _container.innerHTML = UI.emptyState({ icon: '', title: 'Noch kein Hund angelegt', text: 'Erstelle zuerst ein Hundeprofil.', action: ``, }); return; } // Profil laden const dog = _appState.activeDog; try { _profil = await API.get(`/dogs/${dog.id}/ernaehrung`); } catch (_) { _profil = {}; } _container.innerHTML = `
`; _renderTabBar(); _renderTab(); } // ------------------------------------------------------------------ // TAB-BAR // ------------------------------------------------------------------ function _renderTabBar() { const el = _container.querySelector('#ern-tabs'); if (!el) return; el.innerHTML = TABS.map(t => ` `).join(''); el.querySelectorAll('.by-tab').forEach(btn => { btn.addEventListener('click', () => { _activeTab = btn.dataset.tab; el.querySelectorAll('.by-tab').forEach(b => b.classList.remove('active')); btn.classList.add('active'); _renderTab(); }); }); } function _renderTab() { const el = _container.querySelector('#ern-tab-content'); if (!el) return; switch (_activeTab) { case 'rechner': _renderRechner(el); break; case 'guide': _renderGuide(el); break; case 'gift': _renderGift(el); break; case 'ki': _renderKi(el); break; } } // ------------------------------------------------------------------ // TAB 1: KALORIEN-RECHNER // ------------------------------------------------------------------ function _renderRechner(el) { const dog = _appState.activeDog; // Auto-Werte aus Hundeprofil const gewichtDefault = dog?.gewicht || ''; const alterDefault = dog?.alter || ''; el.innerHTML = `Berechne den täglichen Kalorienbedarf deines Hundes.
Richtwert nach Nationaler Forschungsratsformel (NRC). Immer den Körperzustand beobachten.
`; // Profil-Speichern einblenden und kcal vorbelegen const profilSection = el.querySelector('#ern-profil-speichern'); profilSection.style.display = ''; // kcal für Speichern merken profilSection.dataset.kcal = kcal; el.querySelector('#ern-prof-save-btn').onclick = () => _speichereProfil(el, kcal); } async function _speichereProfil(el, kcal) { const dog = _appState.activeDog; const futter_typ = el.querySelector('#ern-prof-typ').value || null; const marke = el.querySelector('#ern-prof-marke').value.trim() || null; const portionen = parseInt(el.querySelector('#ern-prof-portionen').value) || 2; const notizen = el.querySelector('#ern-prof-notizen').value.trim() || null; const btn = el.querySelector('#ern-prof-save-btn'); await UI.asyncButton(btn, async () => { try { _profil = await API.put(`/dogs/${dog.id}/ernaehrung`, { futter_typ, marke, kcal_tag: kcal, portionen, notizen, }); UI.toast.success('Profil gespeichert.'); } catch (err) { UI.toast.error(err.message || 'Fehler beim Speichern.'); } }); } // ------------------------------------------------------------------ // TAB 2: FUTTER-GUIDE // ------------------------------------------------------------------ function _renderGuide(el) { const cards = [ { id: 'barf', emoji: '🥩', titel: 'BARF (Rohfütterung)', inhalt: `Zusammensetzung: 70 % Muskelfleisch, 10 % rohe Knochen, 10 % Organe, 10 % Gemüse & Obst
Vorteile: Naturnahste Ernährungsform, glänzendes Fell, weniger Kot, keine Zusatzstoffe
Risiken: Keimbelastung durch rohes Fleisch, Calcium-Phosphor-Balance muss stimmen, zeitaufwändig und teurer
Tipp: Niemals BARF und Trockenfutter in derselben Mahlzeit mischen — unterschiedliche Verdauungszeiten können zu Problemen führen.
`, }, { id: 'nass', emoji: '🥫', titel: 'Nassfutter', inhalt: `Zusammensetzung: 70–80 % Wasseranteil, meist höherer Fleischanteil als Trockenfutter
Vorteile: Hunde trinken automatisch mehr (gut für die Niere), schmackhafter, gut für wählerische Hunde
Worauf achten: Erste Zutat auf der Liste = Fleisch (nicht „Tierische Nebenerzeugnisse"), kein Zucker, kein Karamell
Zähne: Schlechter für die Zahngesundheit als Trockenfutter — öfter Zähne putzen oder Kauartikel geben.
`, }, { id: 'trocken', emoji: '🌾', titel: 'Trockenfutter', inhalt: `Zusammensetzung: 6–10 % Wasser, ca. 350–400 kcal/100 g, konzentrierte Nährstoffe
Gute Zutaten: Benanntes Fleisch an erster Stelle (Huhn, Lachs), mind. 40 % Tierprotein, kein Getreide als Hauptzutat
Schlechte Zutaten: „Getreide" als erste Zutat, Zucker, Karamell, Konservierungsstoffe E320 / E321
Wichtig: Immer frisches Wasser bereitstellen — Trockenfutter enthält kaum Feuchtigkeit.
`, }, ]; el.innerHTML = `Klicke auf eine Karte für Details.
${cards.map(c => ` `).join('')}Diese Liste ist nicht vollständig. Im Zweifel gilt: lieber weglassen.
')
.replace(/\n/g, '
');
const placeholder = document.getElementById(placeholderId);
if (placeholder) {
placeholder.innerHTML = `
${antwortHtml}