<?php
/**
 * Produtos / Sem Movimento — shell instantâneo.
 */
?>
<div class="pbi-page-header">
    <h1 class="pbi-page-title"><i class="bi bi-pause-circle me-2 text-warning"></i>Produtos</h1>
</div>
<?php include __DIR__ . '/_submenu.php' ?>

<form method="get" action="/produtos/sem-movimento" class="pbi-filtro-barra mb-3 d-flex gap-2 align-items-end">
    <div class="pbi-filtro-field">
        <label class="pbi-filtro-label">Sem venda há</label>
        <select name="dias" class="pbi-filtro-input form-select" style="min-width:140px">
            <?php foreach([30,60,90,120,180,365] as $d): ?>
            <option value="<?= $d ?>" <?= ($diasSemVenda??90)==$d?'selected':'' ?>><?= $d ?> dias</option>
            <?php endforeach; ?>
        </select>
    </div>
    <button type="submit" class="pbi-btn-filtrar btn"><i class="bi bi-funnel me-1"></i>Filtrar</button>
</form>

<div class="pbi-hint mb-3" style="margin-top:0"><strong>Sem movimento</strong> = produto encalhado, sem nenhuma venda no período escolhido. <strong>Capital Parado</strong> = dinheiro preso nesse estoque parado (avaliado pelo custo).</div>

<!-- ── KPIs skeleton ─────────────────────────────────────────────────────── -->
<div class="pbi-kpi-grid mb-4" id="kpi-grid">
    <?php for ($i = 0; $i < 2; $i++): ?>
    <div class="pbi-kpi-card">
        <div class="pbi-kpi-label pbi-skeleton" style="width:60%;height:.8rem;border-radius:4px">&nbsp;</div>
        <div class="pbi-kpi-value pbi-skeleton mt-2" style="width:80%;height:1.6rem;border-radius:4px">&nbsp;</div>
    </div>
    <?php endfor; ?>
</div>

<!-- ── Tabela (async) ────────────────────────────────────────────────────── -->
<div class="pbi-card" id="card-sem-mov">
    <div class="pbi-card-header d-flex justify-content-between">
        <span><i class="bi bi-pause-circle me-2 text-warning"></i>Produtos Sem Movimento</span>
        <small class="text-muted" id="semmov-badge">
            <span class="pbi-skeleton d-inline-block" style="width:80px;height:.75rem;border-radius:3px">&nbsp;</span>
        </small>
        <div class="pbi-hint mb-2" style="margin-top:0">Produtos parados em estoque. <strong>Valor Parado</strong> = estoque × custo (dinheiro travado). <strong>Última Venda</strong> mostra há quanto tempo o item não sai.</div>
    </div>
    <div id="semmov-body">
        <div class="table-responsive">
            <table class="pbi-table">
                <thead><tr>
                    <th>#</th><th>Código</th><th>Produto</th><th>Un</th>
                    <th class="text-end">Estoque</th>
                    <th class="text-end">Custo</th>
                    <th class="text-end">Valor Parado</th>
                    <th class="text-end">Pr. Venda</th>
                    <th>Última Venda</th>
                </tr></thead>
                <tbody>
                <?php for ($i = 0; $i < 8; $i++): ?>
                <tr>
                    <?php foreach ([30,60,160,40,60,70,80,70,65] as $w): ?>
                    <td><span class="pbi-skeleton d-inline-block" style="width:<?= $w ?>px;height:.75rem;border-radius:3px">&nbsp;</span></td>
                    <?php endforeach; ?>
                </tr>
                <?php endfor; ?>
                </tbody>
            </table>
        </div>
    </div>
</div>

<script>
window.__PRODUTOS_SEMMOV = {
    dias: <?= (int)($diasSemVenda??90) ?>
};
</script>

<style>
@keyframes pbi-pulse{0%,100%{opacity:1}50%{opacity:.4}}
.pbi-skeleton{background:var(--pbi-border,#e2e8f0);animation:pbi-pulse 1.4s ease-in-out infinite;pointer-events:none;color:transparent!important}
</style>

<script>
(function(){
'use strict';

var dias = window.__PRODUTOS_SEMMOV.dias;

function fmtR(v){return 'R$ '+parseFloat(v||0).toLocaleString('pt-BR',{minimumFractionDigits:2,maximumFractionDigits:2});}
function fmtN(v,d){return parseFloat(v||0).toLocaleString('pt-BR',{minimumFractionDigits:d||0,maximumFractionDigits:d||0});}
function fmtData(s){if(!s)return'—';return s.substring(8,10)+'/'+s.substring(5,7)+'/'+s.substring(0,4);}
function esc(s){var d=document.createElement('div');d.textContent=s||'';return d.innerHTML;}
function apiFetch(url){
    return fetch(url,{credentials:'same-origin'}).then(function(r){
        if(!r.ok)return r.json().then(function(e){throw new Error(e.erro||'HTTP '+r.status);});
        return r.json();
    });
}

function renderSemMovimento(linhas, diasResp) {
    diasResp = diasResp || dias;
    // Capital parado IGNORA itens com custo suspeito (cadastro errado) — senão um
    // item com custo absurdo (ex.: R$ 7,8 tri) destrói o total.
    var suspeitos = linhas.filter(function(r){return r.CUSTO_SUSPEITO;}).length;
    var valorParado = linhas.reduce(function(s,r){return s+(r.CUSTO_SUSPEITO?0:parseFloat(r.VALOR_PARADO||0));},0);
    var subCapital = 'ao custo' + (suspeitos>0 ? ' · '+suspeitos+' c/ custo suspeito fora do total' : '');

    // KPIs
    document.getElementById('kpi-grid').innerHTML =
        '<div class="pbi-kpi-card border-warning"><div class="pbi-kpi-label">Produtos Parados</div>'
        + '<div class="pbi-kpi-value text-warning">'+linhas.length+'</div>'
        + '<div class="pbi-kpi-sub">sem venda há '+diasResp+' dias</div></div>'
        + '<div class="pbi-kpi-card border-danger"><div class="pbi-kpi-label">Capital Parado</div>'
        + '<div class="pbi-kpi-value text-danger">'+fmtR(valorParado)+'</div>'
        + '<div class="pbi-kpi-sub">'+subCapital+'</div></div>';

    document.getElementById('semmov-badge').textContent = linhas.length + ' itens';

    if (!linhas.length) {
        document.getElementById('semmov-body').innerHTML =
            '<p class="text-center text-success py-4"><i class="bi bi-check-circle me-2"></i>Nenhum produto parado!</p>';
        return;
    }

    var rows = linhas.map(function(r, i){
        var ult = r.ULTIMA_VENDA
            ? fmtData(r.ULTIMA_VENDA)
            : '<span class="text-danger">Nunca</span>';
        var susp = !!r.CUSTO_SUSPEITO;
        var avisoCusto = susp
            ? ' <span title="Custo provavelmente errado no cadastro — verifique no ERP Fire Sistemas" style="cursor:help">⚠️</span>' : '';
        var custoTxt = susp
            ? '<span class="text-warning" title="Custo suspeito (cadastro)">'+fmtR(r.CUSTO_FINAL||0)+avisoCusto+'</span>'
            : fmtR(r.CUSTO_FINAL||0);
        var valorTxt = susp
            ? '<span class="text-warning" title="Não somado no Capital Parado (custo suspeito)">verificar</span>'
            : '<span class="fw-bold text-danger">'+fmtR(r.VALOR_PARADO||0)+'</span>';
        return '<tr'+(susp?' style="background:#fffbeb"':'')+'>'
            + '<td class="text-muted">'+(i+1)+'</td>'
            + '<td class="fw-semibold">'+esc(r.COD_ITEM||'')+'</td>'
            + '<td>'+esc((r.DESCRICAO||'').substring(0,40))+'</td>'
            + '<td><span class="badge bg-secondary">'+esc(r.COD_UNIDADE||'-')+'</span></td>'
            + '<td class="text-end">'+fmtN(r.ESTOQUE_ATUAL||0,1)+'</td>'
            + '<td class="text-end">'+custoTxt+'</td>'
            + '<td class="text-end">'+valorTxt+'</td>'
            + '<td class="text-end">'+fmtR(r.PRECO_VENDA||0)+'</td>'
            + '<td class="text-muted">'+ult+'</td>'
            + '</tr>';
    }).join('');

    document.getElementById('semmov-body').innerHTML =
        '<div class="table-responsive"><table class="pbi-table">'
        + '<thead><tr><th>#</th><th>Código</th><th>Produto</th><th>Un</th>'
        + '<th class="text-end">Estoque</th><th class="text-end">Custo</th>'
        + '<th class="text-end">Valor Parado</th><th class="text-end">Pr. Venda</th>'
        + '<th>Última Venda</th></tr></thead>'
        + '<tbody>'+rows+'</tbody></table></div>';
}

window.addEventListener('DOMContentLoaded', function(){
    apiFetch('/api/produtos/sem-movimento?dias='+dias)
        .then(function(d){renderSemMovimento(d.linhas||[], d.dias||dias);})
        .catch(function(e){
            document.getElementById('semmov-body').innerHTML=
                '<div class="px-3 py-3 alert alert-warning small">Erro: '+esc(e.message)+'</div>';
        });
});

})();
</script>
