            <h1>Systém pro zákazníky a obchodníky</h1>
            <div style="display:flex; gap: 10px; margin-bottom: 20px;">
                <button onclick="showAdsTab('customers')">Zákazníci a Obchodníci</button> <button onclick="showAdsTab('spaces')">Reklamní prostory</button> <button onclick="showAdsTab('campaigns')">Správa kampaní</button> <button onclick="showAdsTab('pricelist')">Ceník a Export (PDF)</button>
            </div>
            <div id="tab-customers" class="ads-tab glass" style="padding: 20px; display:block;">
                <div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:15px;">
                    <h3 style="margin:0;">Přidat / Upravit osobu</h3>
                    <div>
                        <button type="button" onclick="openImportCustomersModal()" style="background: var(--accent); color: #000; margin-right: 10px; padding: 8px 15px;">➕ Hromadný Import</button>
                        <button type="button" onclick="window.open('/admin/api/export-csv?type=customers', '_blank')" style="background: rgba(255,255,255,0.2); padding: 8px 15px;">💾 Export CSV</button>
                    </div>
                </div>
                <form id="form-customers" class="form-group" style="flex-wrap: wrap;">
                    <input type="hidden" id="custId"> <input type="text" id="custName" placeholder="Jméno / Název" required> <select id="custType"><option value="customer">Zákazník</option><option value="sales">Obchodník</option></select>
                    <input type="email" id="custEmail" placeholder="E-mail (Přihlašovací login)" required> <input type="text" id="custPhone" placeholder="Telefon"> 
                    <div style="flex:1;"><div class="pwd-wrapper"><input type="password" id="custPassword" placeholder="Heslo (změna/vytvoření)"><button type="button" class="pwd-toggle" onclick="togglePwd('custPassword', this)">👁️</button></div></div> <button type="submit">Uložit</button> <button type="button" onclick="document.getElementById('form-customers').reset(); document.getElementById('custId').value='';" style="background: rgba(255,255,255,0.2);">Zrušit</button>
                </form>
                <table><thead><tr><th>Název</th><th>Typ</th><th>E-mail</th><th>Telefon</th><th>Akce</th></tr></thead><tbody id="tbody-customers"></tbody></table>
            </div>
            <div id="tab-spaces" class="ads-tab glass" style="padding: 20px; display:none;">
                <h3>Přidat / Upravit prostor</h3>
                <form id="form-spaces" class="form-group">
                    <input type="hidden" id="spaceId"> <input type="text" id="spaceName" placeholder="Název" required> <input type="number" id="spaceMaxSpots" placeholder="Max. spotů" required min="1">
                    <button type="submit">Uložit</button> <button type="button" onclick="document.getElementById('form-spaces').reset(); document.getElementById('spaceId').value='';" style="background: rgba(255,255,255,0.2);">Zrušit</button>
                </form>
                <table><thead><tr><th>Název</th><th>Max. spotů</th><th>Akce</th></tr></thead><tbody id="tbody-spaces"></tbody></table>
            </div>
            <div id="tab-campaigns" class="ads-tab glass" style="padding: 20px; display:none;">
                <h3>Přidat / Upravit kampaň</h3>
                <form id="form-campaigns" class="form-group" style="flex-wrap: wrap;">
                    <input type="hidden" id="campId"> <input type="text" id="campName" placeholder="Název" required> <select id="campCustomer" required><option value="">-- Zákazník --</option></select> <select id="campSpace" required><option value="">-- Prostor --</option></select>
                    <div style="display:flex; align-items:center; gap:10px;">Období: <input type="date" id="campStart" required> až <input type="date" id="campEnd" required></div>
                    <label><input type="checkbox" id="campActive" checked> Aktivní</label> <button type="submit">Uložit</button> <button type="button" onclick="document.getElementById('form-campaigns').reset(); document.getElementById('campId').value='';" style="background: rgba(255,255,255,0.2);">Zrušit</button>
                </form>
                <table><thead><tr><th>Název</th><th>Zákazník</th><th>Prostor</th><th>Od - Do</th><th>Stav</th><th>Akce</th></tr></thead><tbody id="tbody-campaigns"></tbody></table>
            </div>
            <div id="tab-pricelist" class="ads-tab glass" style="padding: 20px; display:none;">
                <h3>Editace ceníku reklamy</h3>
                <p>Vytvořte obsah ceníku. Ten můžete následně exportovat do PDF pro své zákazníky a obchodníky.</p>
                <form id="form-pricelist" class="form-group" style="flex-wrap: wrap;">
                    <textarea id="pricelistContent" class="tinymce" rows="15" style="width:100%;"></textarea>
                    <div style="width:100%; display:flex; gap:10px; margin-top:15px;">
                        <button type="submit">Uložit obsah ceníku</button>
                        <button type="button" onclick="generateSamplePricelist()" style="background: #11998e; color: #fff;">💡 Předvyplnit vzorový ceník</button>
                        <button type="button" onclick="exportPricelistPdf()" style="background: linear-gradient(135deg, #b026ff 0%, #5a26ff 100%); color: #fff;">📄 Exportovat do PDF</button>
                        <button type="button" onclick="emailPricelist()" style="background: linear-gradient(135deg, #f2c94c 0%, #f2994a 100%); color: #000;">✉️ Odeslat e-mailem</button>
                    </div>
                </form>
            </div>
<div id="importCustomersModal" class="modal-overlay" style="z-index:1001; display:none;">
    <div class="modal-content" style="width: 500px;">
        <h3>Hromadný import zákazníků</h3>
        <p style="font-size:0.9rem; color:var(--text-muted);">Nahrajte textový soubor (.txt, .csv). Co řádek, to jedna e-mailová adresa. Systém naimportuje kontakty a jako Jméno použije část e-mailu před zavináčem.</p>
        <form id="form-import-customers" class="form-group" style="flex-wrap: wrap;">
            <div style="width:100%;"><input type="file" id="importCustomersFile" accept=".txt,.csv" style="width:100%;" required></div>
            <div style="width:100%; margin-top:15px; display:flex; gap:10px;"><button type="submit" style="background: linear-gradient(135deg, #11998e 0%, #38ef7d 100%); color: #000; flex:1;">Importovat</button><button type="button" onclick="closeImportCustomersModal()" style="background: rgba(255,255,255,0.2);">Zrušit</button></div>
        </form>
    </div>
</div>
            <script>
                function showAdsTab(tab) { document.querySelectorAll('.ads-tab').forEach(el => el.style.display = 'none'); document.getElementById('tab-' + tab).style.display = 'block'; loadAdsData(); }
                let allCustomers = []; let allSpaces = [];
                async function apiReq(endpoint, method='GET', body=null) { const opts = { method, headers: {'Content-Type': 'application/json'} }; if(body) opts.body = JSON.stringify(body); const res = await fetch('/admin/api/' + endpoint, opts); return await res.json(); }
                async function loadAdsData() {
                    const resPl = await fetch('/admin/api/ad-settings'); const jsonPl = await resPl.json();
                    if (jsonPl.data && jsonPl.data.pricelist_html) { setTinyContent('pricelistContent', jsonPl.data.pricelist_html); }

                    allCustomers = (await apiReq('customers')).data || []; 
                    document.getElementById('tbody-customers').innerHTML = allCustomers.map((c, idx) => `<tr><td>${c.name}</td><td>${c.type==='sales'?'💼 Obchodník':'🛒 Zákazník'}</td><td>${c.email}</td><td>${c.phone}</td><td><button class="action-btn" onclick='editData("customers", allCustomers[${idx}])'>Upravit</button> <button class="action-btn btn-delete" onclick="delItem('customers', '${c.id}')">Smazat</button></td></tr>`).join('');
                    
                    allSpaces = (await apiReq('ad_spaces')).data || []; 
                    document.getElementById('tbody-spaces').innerHTML = allSpaces.map((s, idx) => `<tr><td>${s.name}</td><td>${s.maxSpots}</td><td><button class="action-btn" onclick='editData("spaces", allSpaces[${idx}])'>Upravit</button> <button class="action-btn btn-delete" onclick="delItem('ad_spaces', '${s.id}')">Smazat</button></td></tr>`).join('');
                    
                    const allCamps = (await apiReq('campaigns')).data || []; document.getElementById('campCustomer').innerHTML = '<option value="">-- Zákazník --</option>' + allCustomers.filter(c => c.type === 'customer').map(c => `<option value="${c.id}">${c.name}</option>`).join(''); document.getElementById('campSpace').innerHTML = '<option value="">-- Prostor --</option>' + allSpaces.map(s => `<option value="${s.id}">${s.name}</option>`).join('');
                    window.allCampsData = allCamps; // Bezpečné globální pole pro kampaň
                    document.getElementById('tbody-campaigns').innerHTML = allCamps.map((c, idx) => { 
                        const custName = allCustomers.find(x => x.id === c.customerId)?.name || '?'; 
                        const spaceName = allSpaces.find(x => x.id === c.spaceId)?.name || '?'; 
                        return `<tr><td>${c.name}</td><td>${custName}</td><td>${spaceName}</td><td>${c.start} až ${c.end}</td><td>${c.active?'🟢':'🔴'}</td><td><button class="action-btn btn-info" onclick="sendReport('${c.id}')">Report</button> <button class="action-btn" onclick='editData("campaigns", window.allCampsData[${idx}])'>Upravit</button> <button class="action-btn btn-delete" onclick="delItem('campaigns', '${c.id}')">Smazat</button></td></tr>`; 
                    }).join('');
                }
                function editData(type, data) { if(type === 'customers') { document.getElementById('custId').value = data.id; document.getElementById('custName').value = data.name; document.getElementById('custType').value = data.type; document.getElementById('custEmail').value = data.email || ''; document.getElementById('custPhone').value = data.phone || ''; document.getElementById('custPassword').value = ''; } if(type === 'spaces') { document.getElementById('spaceId').value = data.id; document.getElementById('spaceName').value = data.name; document.getElementById('spaceMaxSpots').value = data.maxSpots; } if(type === 'campaigns') { document.getElementById('campId').value = data.id; document.getElementById('campName').value = data.name; document.getElementById('campCustomer').value = data.customerId; document.getElementById('campSpace').value = data.spaceId; document.getElementById('campStart').value = data.start; document.getElementById('campEnd').value = data.end; document.getElementById('campActive').checked = data.active; } }
                async function delItem(endpoint, id, callback) { customConfirm('Opravdu smazat?', async () => { await fetch('/admin/api/' + endpoint, { method: 'DELETE', headers: {'Content-Type':'application/json'}, body: JSON.stringify({id}) }); if(callback) callback(); else loadAdsData(); }); }
                window.sendReport = function(id) {
                    const campaign = (window.allCampsData || []).find(c => c.id === id); if (!campaign) return;
                    const customer = (allCustomers || []).find(c => c.id === campaign.customerId);
                    const toEmail = customer ? customer.email : '';
                    if (typeof window.openEmailComposer !== 'function') return customAlert('E-mailový klient se načítá...');
                    window.openEmailComposer(toEmail, `Report kampaně: ${campaign.name}`, `Dobrý den,<br><br>v příloze naleznete vygenerovaný report k vaší reklamní kampani <b>${campaign.name}</b>.<br><br>S pozdravem,`, `Report_Kampane_${campaign.name}.pdf`, '/admin/api/campaign-report', { campId: id });
                };
                
                window.exportPricelistPdf = function() { window.open('/admin/api/pricelist-pdf', '_blank'); };
                window.emailPricelist = function() {
                    if (typeof window.openEmailComposer !== 'function') return customAlert('E-mailový klient se načítá...');
                    window.openEmailComposer('', 'Aktuální ceník reklamních služeb', 'Dobrý den,<br><br>v příloze Vám zasíláme náš aktuální ceník reklamních služeb.<br><br>S pozdravem,', 'Cenik_Reklamy.pdf', '/admin/api/send-pricelist');
                };
                window.generateSamplePricelist = function() {
                    customConfirm('Opravdu chcete přepsat současný obsah vzorovým ceníkem?', () => {
                        const sampleHtml = `<h2 style="text-align: center; color: #1e3c72;">Ceník reklamních služeb</h2><p style="text-align: center;">Platný pro aktuální rok</p><hr /><h3>1. Klasická spotová kampaň (30 vteřin)</h3><table style="width: 100%; border-collapse: collapse; margin-bottom: 20px;" border="1" cellpadding="10"><thead><tr style="background-color: #f2f2f2;"><th>Časové pásmo</th><th>Pondělí - Pátek</th><th>Víkend a Svátky</th></tr></thead><tbody><tr><td><strong>Ranní Prime-Time</strong> (06:00 - 10:00)</td><td>800 Kč / spot</td><td>400 Kč / spot</td></tr><tr><td><strong>Denní vysílání</strong> (10:00 - 18:00)</td><td>500 Kč / spot</td><td>300 Kč / spot</td></tr><tr><td><strong>Večerní a noční čas</strong> (18:00 - 06:00)</td><td>200 Kč / spot</td><td>150 Kč / spot</td></tr></tbody></table><h3>2. Sponzoring pořadů a časomíry</h3><ul><li><strong>Sponzor časomíry:</strong> 10 000 Kč / měsíc (vzkaz před celou hodinou)</li><li><strong>Sponzor počasí / dopravy:</strong> 8 000 Kč / měsíc</li><li><strong>Sponzor konkrétního pořadu:</strong> Dle individuální dohody</li></ul><h3>3. Výroba reklamního spotu</h3><ul><li><strong>Základní spot (1 hlas, hudební podkres):</strong> 2 500 Kč</li><li><strong>Rozšířený spot (2 hlasy, efekty, scénka):</strong> 4 500 Kč</li></ul><hr /><p><em>Všechny uvedené ceny jsou bez DPH (21 %). Množstevní slevy jsou řešeny individuálně při dlouhodobé spolupráci.</em></p>`;
                        setTinyContent('pricelistContent', sampleHtml);
                    });
                };
                
                function openImportCustomersModal() { document.getElementById('importCustomersModal').style.display = 'flex'; }
                function closeImportCustomersModal() { document.getElementById('importCustomersModal').style.display = 'none'; document.getElementById('form-import-customers').reset(); }
                
                document.getElementById('form-import-customers').addEventListener('submit', async (e) => {
                    e.preventDefault();
                    const fileInput = document.getElementById('importCustomersFile');
                    if (fileInput.files.length === 0) return;
                    const text = await fileInput.files[0].text();
                    const emails = text.split(/\r?\n/).map(e => e.trim()).filter(e => e && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e));
                    if (emails.length === 0) return customAlert('Nebyly nalezeny žádné platné e-mailové adresy.', 'Chyba');
                    
                    const btn = e.target.querySelector('button[type="submit"]'); const origTxt = btn.innerText; btn.innerText = 'Importuji (může chvíli trvat)...'; btn.disabled = true;
                    
                    let imported = 0;
                    for (const email of emails) {
                        if (!allCustomers.find(c => c.email === email)) {
                            try {
                                const namePart = email.split('@')[0];
                                await fetch('/admin/api/customers', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: email, name: namePart, type: 'customer' }) });
                                imported++;
                                allCustomers.push({email: email}); // Prevence duplicit
                            } catch(err) {}
                        }
                    }
                    
                    btn.innerText = origTxt; btn.disabled = false;
                    customAlert(`Import dokončen. Nově přidáno: ${imported} zákazníků (z celkových ${emails.length} v souboru).`, 'Hotovo');
                    closeImportCustomersModal(); loadAdsData();
                });

                document.getElementById('form-customers').addEventListener('submit', async (e) => { 
                    e.preventDefault(); 
                    const res = await apiReq('customers', 'POST', { 
                        id: document.getElementById('custId').value, 
                        name: document.getElementById('custName').value, 
                        type: document.getElementById('custType').value, 
                        email: document.getElementById('custEmail').value, 
                        phone: document.getElementById('custPhone').value, 
                        password: document.getElementById('custPassword').value 
                    }); 
                    if (res.status === 'error') { alert(res.message); return; } 
                    document.getElementById('form-customers').reset(); document.getElementById('custId').value=''; loadAdsData(); 
                }); 
                
                document.getElementById('form-spaces').addEventListener('submit', async (e) => { 
                    e.preventDefault(); 
                    await apiReq('ad_spaces', 'POST', { 
                        id: document.getElementById('spaceId').value, 
                        name: document.getElementById('spaceName').value, 
                        maxSpots: document.getElementById('spaceMaxSpots').value 
                    }); 
                    document.getElementById('form-spaces').reset(); document.getElementById('spaceId').value=''; loadAdsData(); 
                }); 
                
                document.getElementById('form-campaigns').addEventListener('submit', async (e) => { 
                    e.preventDefault(); 
                    await apiReq('campaigns', 'POST', { 
                        id: document.getElementById('campId').value, 
                        name: document.getElementById('campName').value, 
                        customerId: document.getElementById('campCustomer').value, 
                        spaceId: document.getElementById('campSpace').value, 
                        start: document.getElementById('campStart').value, 
                        end: document.getElementById('campEnd').value, 
                        active: document.getElementById('campActive').checked 
                    }); 
                    document.getElementById('form-campaigns').reset(); document.getElementById('campId').value=''; loadAdsData(); 
                });
                
                document.getElementById('form-pricelist').addEventListener('submit', async (e) => { 
                    e.preventDefault(); 
                    await fetch('/admin/api/ad-settings', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({pricelist_html: getTinyContent('pricelistContent')}) }); 
                    customAlert('Ceník byl úspěšně uložen.', 'Uloženo'); 
                });
                loadAdsData();
            </script>