/* ============================================================
BAN YARO — Öffentliches Züchter-Profil
Seiten-Modul: Zeigt das verifizierte Profil eines Züchters.
============================================================ */
window.Page_breeder = (() => {
let _container = null;
let _appState = null;
// ----------------------------------------------------------
// INIT
// ----------------------------------------------------------
async function init(container, appState, params = {}) {
_container = container;
_appState = appState;
// Zwingername aus params oder URL-Pfad (/breeder/vom-sonnenfeld)
const zwingername = params?.zwingername
|| decodeURIComponent((window.location.pathname.split('/breeder/')[1] || '').replace(/\/$/, ''));
if (!zwingername) {
container.innerHTML = '
Kein Zwingername angegeben.
';
return;
}
container.innerHTML = 'Lade…
';
try {
const p = await API.breeder.profile(zwingername);
_render(p);
} catch (e) {
container.innerHTML = `${_esc(e.message || 'Züchter nicht gefunden.')}
`;
}
}
// ----------------------------------------------------------
// RENDER
// ----------------------------------------------------------
function _render(p) {
const verifiedDate = p.verified_at
? new Date(p.verified_at).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' })
: null;
const websiteHtml = p.website
? `
${UI.icon('arrow-square-out')} ${_esc(p.website)}
`
: '';
const beschreibungHtml = p.beschreibung
? ``
: '';
_container.innerHTML = `
${UI.icon('certificate')} ${_esc(p.zwingername)}
${UI.icon('seal-check')} Verifizierter Züchter
- Rasse
- ${_esc(p.rasse_text || '–')}
- Verein
- ${_esc(p.verein || '–')}
- VDH-Mitglied
-
${p.vdh_mitglied
? `${UI.icon('check')} Ja`
: `Nein`}
- Stadt
- ${_esc(p.stadt || '–')}
${p.website ? `
- Website
- ${websiteHtml}
` : ''}
${verifiedDate ? `
- Verifiziert
- ${verifiedDate}
` : ''}
- Züchter
- ${_esc(p.zuechter_name || '–')}
${beschreibungHtml}
${(() => {
if (!p.zuechter_user_id) return '';
const isLoggedIn = !!_appState?.user;
const isOwnProfile = _appState?.user?.id === p.zuechter_user_id;
if (isOwnProfile) return '';
if (isLoggedIn) {
return `
`;
}
return `
`;
})()}
`;
_container.querySelector('.breeder-chat-btn')?.addEventListener('click', () => {
_contactBreeder(p.zuechter_user_id);
});
_container.querySelector('.breeder-login-btn')?.addEventListener('click', () => {
App.navigate('settings');
});
// Öffentliche Fotos nachladen
_loadBreederPhotos(p.id);
}
async function _loadBreederPhotos(breederId) {
const section = document.getElementById('breeder-photos-section');
if (!section) return;
try {
const photos = await API.breederPhotos.list('breeder', breederId);
if (!photos || !photos.length) return;
section.innerHTML = `
${UI.icon('images')} Fotos
${photos.map(ph => {
const thumb = ph.thumbnail_url || ph.url || '';
return `
`;
}).join('')}
`;
} catch (_) {
// Fotos sind nicht kritisch — bei Fehler still ignorieren
}
}
async function _contactBreeder(breederId) {
if (!_appState?.user) {
App.navigate('settings');
return;
}
try {
await API.chat.start(breederId);
App.navigate('chat');
} catch (e) {
UI.toast.error(e.message || 'Chat konnte nicht geöffnet werden.');
}
}
function refresh() {}
function onDogChange() {}
return { init, refresh, onDogChange };
})();