{{define "launch_tile"}}
<span class="launch-tile{{if .Off}} launch-tile--off{{end}}" style="background: {{tileColor .Slug .BrandColor}}">
    <span class="launch-mono">{{initial .DisplayName}}</span>
    <img class="launch-logo" src="{{logoURL .Slug}}" alt=""
         onerror="if(!this.dataset.step){this.dataset.step='1';this.src='{{logoPNGURL .Slug}}';}else{this.onerror=null;this.style.display='none';this.parentElement.classList.add('launch-tile--noimg');}">
</span>
{{end}}

{{define "launcher"}}
{{template "layout_start" .}}

<div class="page-header">
    <h2>Indítópult</h2>
    <span class="domain-badge">{{.Domain}}</span>
    <button type="button" class="btn btn-outline share-open-btn" onclick="openShareModal()"><svg class="ico"><use href="#i-share"/></svg>Indítópult megosztása</button>
</div>

{{if .ShareFlash}}
<div class="alerts-container">
    <div class="alert-banner alert-banner-info">
        <span class="alert-icon"><svg class="ico"><use href="#i-info"/></svg></span>
        <span class="alert-message">{{.ShareFlash}}</span>
    </div>
</div>
{{end}}

{{if .Apps}}
<div class="launch-grid">
    {{range .Apps}}
    {{if isOperational .State}}
    <a class="launch-cell" href="https://{{.Subdomain}}.{{$.Domain}}{{.OpenPath}}" target="_blank" rel="noopener">
        {{template "launch_tile" (dict "Slug" .Slug "BrandColor" .BrandColor "DisplayName" .DisplayName "Off" false)}}
        <span class="launch-name">{{.DisplayName}}</span>
        {{if ne (stateStr .State) "running"}}<span class="tag tag-{{stateColor .State}}"><span class="dot"></span>{{stateLabel .State}}</span>{{end}}
    </a>
    {{else}}
    <div class="launch-cell launch-cell--off">
        {{template "launch_tile" (dict "Slug" .Slug "BrandColor" .BrandColor "DisplayName" .DisplayName "Off" true)}}
        <span class="launch-name">{{.DisplayName}}</span>
        <span class="tag tag-{{stateColor .State}}"><span class="dot"></span>{{stateLabel .State}}</span>
    </div>
    {{end}}
    {{end}}
</div>
{{else}}
<div class="empty-state">
    <p>Még nincs telepített alkalmazás.</p>
    <p><a href="/stacks" class="empty-state-link">Alkalmazások telepítése</a></p>
</div>
{{end}}

<div class="modal-overlay" id="share-modal" style="display:none">
    <div class="modal-card">
        <h3>Indítópult megosztása</h3>
        <p class="share-lede">Egy megosztható link, amely csak megmutatja az alkalmazásokat és új lapon megnyitja őket. Fiók nélkül, felügyeleti hozzáférés nélkül — minden alkalmazás a saját bejelentkezése mögött marad.</p>
        {{if .ShareEnabled}}
        <div class="share-field">
            <label class="share-label">Megosztási link</label>
            <div class="share-link-row">
                <input id="share-link-input" type="text" readonly value="{{.ShareURL}}">
                <button type="button" id="share-copy-btn" class="btn btn-outline" onclick="copyShareLink()">Link másolása</button>
                <button type="button" id="share-native-btn" class="btn btn-outline" style="display:none" onclick="nativeShare()">Megosztás…</button>
            </div>
        </div>
        <div class="share-qr">
            <img src="/launcher/share/qr.png" alt="QR-kód a megosztási linkhez" width="200" height="200">
            <span class="share-qr-hint">Olvassa be telefonnal a gyors megnyitáshoz.</span>
        </div>
        <div class="share-field">
            {{if .SharePasswordSet}}
            <label class="share-label">Jelszó</label>
            <p class="share-note">A megosztás jelszóval védett.</p>
            <form method="POST" action="/launcher/share/password">
                {{.CSRFField}}
                <input type="hidden" name="action" value="clear">
                <button type="submit" class="btn btn-outline">Jelszó törlése</button>
            </form>
            {{else}}
            <form method="POST" action="/launcher/share/password">
                {{.CSRFField}}
                <label class="share-label">Jelszó (nem kötelező)</label>
                <div class="share-link-row">
                    <input type="password" name="password" autocomplete="new-password" placeholder="Legalább 8 karakter">
                    <button type="submit" class="btn btn-outline">Jelszó beállítása</button>
                </div>
            </form>
            {{end}}
        </div>
        <div class="share-actions">
            <form method="POST" action="/launcher/share/rotate">
                {{.CSRFField}}
                <button type="submit" class="btn btn-outline" data-confirm="Új link készítése? A régi link és minden korábbi belépés érvénytelenné válik.">Új link készítése</button>
            </form>
            <form method="POST" action="/launcher/share/disable">
                {{.CSRFField}}
                <button type="submit" class="btn btn-danger" data-confirm="Biztosan kikapcsolja a megosztást? A link azonnal érvénytelenné válik.">Megosztás kikapcsolása</button>
            </form>
        </div>
        {{else}}
        <p class="share-note">A megosztás jelenleg ki van kapcsolva.</p>
        <form method="POST" action="/launcher/share/enable">
            {{.CSRFField}}
            <div class="modal-actions">
                <button type="button" class="btn btn-outline" onclick="closeShareModal()">Bezárás</button>
                <button type="submit" class="btn btn-primary">Megosztás bekapcsolása</button>
            </div>
        </form>
        {{end}}
        {{if .ShareEnabled}}
        <div class="modal-actions">
            <button type="button" class="btn btn-outline" onclick="closeShareModal()">Bezárás</button>
        </div>
        {{end}}
    </div>
</div>

<script>
function openShareModal(){var m=document.getElementById('share-modal');if(m)m.style.display='flex';}
function closeShareModal(){var m=document.getElementById('share-modal');if(m)m.style.display='none';}
function copyShareLink(){
    var inp=document.getElementById('share-link-input');
    var btn=document.getElementById('share-copy-btn');
    if(!inp)return;
    function done(){if(btn){var o=btn.textContent;btn.textContent='Másolva';setTimeout(function(){btn.textContent=o;},1500);}}
    if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(inp.value).then(done,function(){inp.select();done();});}
    else{inp.select();try{document.execCommand('copy');}catch(e){}done();}
}
// Native OS share sheet (Web Share API, feature-detected). URL + title/text only — never the QR as a
// file: file-share support is narrow and several targets drop the URL when handed file+URL. On a
// non-cancel rejection, fall back to the universal clipboard copy so the user still keeps the link.
function nativeShare(){
    var inp=document.getElementById('share-link-input');
    if(!inp||!navigator.share)return;
    navigator.share({title:'Indítópult — {{.Domain}}',text:'Az otthoni alkalmazások egy helyen.',url:inp.value})
        .catch(function(e){if(e&&e.name==='AbortError')return;copyShareLink();});
}
(function(){
    var m=document.getElementById('share-modal');
    if(m){m.addEventListener('click',function(e){if(e.target===m)closeShareModal();});}
    if(navigator.share){var nb=document.getElementById('share-native-btn');if(nb)nb.style.display='';}
    {{if .ShareFlash}}openShareModal();{{end}}
})();
</script>

{{template "layout_end"}}
{{end}}
