/* ============================================================ BAN YARO — Züchter-Bereich Hub für Züchter: Profil-Status, Wurfverwaltung, Zuchtkartei. (Läufigkeit bleibt bewusst als eigener Chip in der HUND-Welt.) ============================================================ */ window.Page_breeder_dashboard = (() => { let _container = null; let _appState = null; async function init(container, appState) { _container = container; _appState = appState; _render(); await _load(); } function refresh() { _load(); } function onDogChange() {} function _render() { _container.innerHTML = `

${UI.icon('certificate')} Züchter-Bereich

Dein Zwinger, deine Würfe, deine Zuchthunde.

Lade…
`; } async function _load() { const el = _container.querySelector('#bd-content'); try { const [status, litters, hunde] = await Promise.all([ API.breeder.status().catch(() => null), API.litters.myList().catch(() => []), API.zuchthunde.list().catch(() => []), ]); el.innerHTML = _renderHub(status, litters || [], hunde || []); _bindEvents(el); } catch (e) { el.innerHTML = `

${UI.escape(e.message || 'Fehler beim Laden.')}

`; } } function _renderHub(status, litters, hunde) { const profile = status?.profile; const isBreeder = status?.rolle === 'breeder' || status?.rolle === 'admin'; if (!isBreeder) { return `

Der Züchter-Bereich ist für verifizierte Züchter. Den Antrag findest du in den Einstellungen.

`; } return `
Mein Zwinger
${UI.escape(profile?.zwingername || 'Noch kein Profil angelegt')}
${profile?.rasse_text ? `
${UI.escape(profile.rasse_text)}
` : ''} ${UI.icon('check-circle')} ${status?.rolle === 'admin' ? 'Admin — alle Züchter-Features' : 'Verifizierter Züchter'}
${profile ? `` : status?.rolle === 'admin' ? `` : ''}
${profile ? `
KI-Züchter-Assistenz
${_kiToggleRow('ki_zucht_wurfankuendigung', 'Wurfankündigungen schreiben')} ${_kiToggleRow('ki_zucht_genetik', 'Genetik-Erklärung für Käufer')} ${_kiToggleRow('ki_zucht_paarung', 'Paarungsanalyse')} ${_kiToggleRow('ki_zucht_beschreibung', 'Hunde-Beschreibungen')} ${_kiToggleRow('ki_zucht_jahresbericht', 'Jahresauswertung')}
${UI.icon('info')} Der Tierschutz-Check läuft immer automatisch und ist nicht abschaltbar.
` : ''}
Wurfverwaltung
${litters.length} ${litters.length === 1 ? 'Wurf' : 'Würfe'} · Welpen, Gewichte, Kaufverträge
Zuchtkartei
${hunde.length} ${hunde.length === 1 ? 'Zuchthund' : 'Zuchthunde'} · Stammbaum, Genetik, Titel
Läufigkeit & Trächtigkeit
Zyklen, Progesterontests, Deckdaten, Meilensteine
`; } // KI-Toggle-Zeile (aus settings.js umgezogen — Zustand kommt aus _appState.user) function _kiToggleRow(key, label) { const user = _appState?.user || {}; const active = user[key] !== 0; return `
${UI.escape(label)}
`; } function _bindEvents(el) { el.querySelectorAll('[data-bd-nav]').forEach(btn => { btn.addEventListener('click', () => App.navigate(btn.dataset.bdNav)); }); // Admin ohne Profil: Züchterprofil anlegen el.querySelector('#bd-admin-create')?.addEventListener('click', async e => { const btn = e.currentTarget; btn.disabled = true; btn.textContent = 'Wird angelegt…'; try { await API.breeder.adminCreateProfile(); UI.toast.success('Admin-Züchterprofil angelegt.'); await _load(); } catch (err) { UI.toast.error(err.message || 'Fehler beim Anlegen.'); btn.disabled = false; btn.innerHTML = `${UI.icon('plus')} Profil anlegen`; } }); // KI-Toggles — optimistisches Update mit Revert bei Fehler el.querySelectorAll('.bd-ki-toggle').forEach(btn => { btn.addEventListener('click', async () => { const key = btn.dataset.key; const active = btn.dataset.active === '1'; const newVal = active ? 0 : 1; const thumb = btn.querySelector('.by-toggle-thumb'); btn.dataset.active = newVal ? '1' : '0'; btn.style.background = newVal ? 'var(--c-primary)' : 'var(--c-border)'; if (thumb) thumb.style.left = newVal ? '22px' : '2px'; try { await API.patch('/profile', { [key]: newVal }); if (_appState?.user) _appState.user[key] = newVal; UI.toast.success(newVal ? 'KI-Feature aktiviert.' : 'KI-Feature deaktiviert.'); } catch (err) { btn.dataset.active = active ? '1' : '0'; btn.style.background = active ? 'var(--c-primary)' : 'var(--c-border)'; if (thumb) thumb.style.left = active ? '22px' : '2px'; UI.toast.error(err?.message || 'Einstellung konnte nicht gespeichert werden.'); } }); }); } return { init, refresh, onDogChange }; })();