<?php
/**
 * Vendas Diárias — dashboard completo com ECharts.
 * Shell instantaneo: sem queries no render. Dados via fetch() apos DOM pronto.
 */
$actionUrl = '/vendas/diarias';
?>
<div class="pbi-page-header">
    <div class="pbi-page-icon"><i class="bi bi-calendar-day"></i></div>
    <div>
        <div class="pbi-page-title">Vendas Diárias</div>
        <div class="pbi-page-subtitle" id="diarias-periodo-label">Carregando...</div>
    </div>
    <div class="ms-auto d-flex gap-2 align-items-center">
        <span id="diarias-badge" class="badge bg-secondary">...</span>
        <button id="btnDiariasAtualizar" class="btn btn-sm btn-outline-secondary" title="Atualizar dados">
            <i class="bi bi-arrow-clockwise"></i>
        </button>
    </div>
</div>

<?php include __DIR__ . '/_submenu.php' ?>
<?php include __DIR__ . '/_filtro.php'; ?>

<!-- KPIs -->
<div class="row g-3 mb-4" id="kpi-row">
    <?php for ($i = 0; $i < 6; $i++): ?>
    <div class="col-6 col-md-4 col-lg-2">
        <div class="pbi-kpi-card">
            <div class="pbi-kpi-label pbi-skeleton" style="height:.8rem;border-radius:3px">&nbsp;</div>
            <div class="pbi-kpi-valor pbi-skeleton mt-2" style="height:1.6rem;border-radius:4px">&nbsp;</div>
        </div>
    </div>
    <?php endfor; ?>
</div>
<div class="pbi-hint mb-3" style="margin-top:0"><strong>Ticket Médio</strong> = valor médio por venda (faturamento ÷ nº de notas). <strong>Notas</strong> = quantidade de vendas emitidas.</div>

<!-- Evolucao Diaria -->
<div class="pbi-card mb-4">
    <div class="pbi-card-header"><i class="bi bi-bar-chart-line me-2"></i>Evolução Diária do Faturamento</div>
    <div class="pbi-card-body p-0">
        <div class="pbi-hint mb-2" style="margin-top:0;padding-left:1rem;padding-right:1rem">Faturamento de cada dia do período. A linha mostra o <strong>nº de notas (vendas)</strong> de cada dia.</div>
        <div id="diarias-evol-chart" style="height:260px"></div>
    </div>
</div>

<!-- 3 graficos (um por linha, largura total) -->
<div class="row g-3 mb-4">
    <div class="col-12">
        <div class="pbi-card h-100">
            <div class="pbi-card-header"><i class="bi bi-clock me-2"></i>Faturamento por Hora</div>
            <div class="pbi-card-body p-0">
                <div class="pbi-hint mb-2" style="margin-top:0;padding-left:1rem;padding-right:1rem">Em quais horas do dia você mais vende (soma de todo o período).</div>
                <div id="diarias-hora-chart" style="height:220px"></div>
                <div id="diarias-hora-msg" class="text-center text-muted py-4 small" style="display:none">
                    <i class="bi bi-clock-history me-1"></i>Hora da venda não disponível neste banco
                </div>
            </div>
        </div>
    </div>
    <div class="col-12">
        <div class="pbi-card h-100">
            <div class="pbi-card-header"><i class="bi bi-calendar-week me-2"></i>Por Dia da Semana</div>
            <div class="pbi-card-body p-0">
                <div class="pbi-hint mb-2" style="margin-top:0;padding-left:1rem;padding-right:1rem">Faturamento somado por dia da semana, mostrando seus dias mais fortes.</div>
                <div id="diarias-diasem-chart" style="height:220px"></div>
            </div>
        </div>
    </div>
    <div class="col-12">
        <div class="pbi-card h-100">
            <div class="pbi-card-header"><i class="bi bi-pie-chart me-2"></i>Forma de Pagamento</div>
            <div class="pbi-card-body p-0">
                <div class="pbi-hint mb-2" style="margin-top:0;padding-left:1rem;padding-right:1rem">Quanto do faturamento entrou em cada forma de pagamento (dinheiro, débito, crédito, pix).</div>
                <div id="diarias-pgto-chart" style="height:340px"></div>
            </div>
        </div>
    </div>
</div>

<!-- Tabela detalhada -->
<div class="pbi-card mb-4">
    <div class="pbi-card-header d-flex justify-content-between align-items-center">
        <span><i class="bi bi-table me-2"></i>Detalhamento por Dia</span>
        <small class="text-muted" id="diarias-tabela-badge">...</small>
    </div>
    <div class="pbi-card-body p-0">
        <div class="pbi-hint mb-2" style="margin-top:0;padding-left:1rem;padding-right:1rem"><strong>Notas</strong> = nº de vendas no dia; <strong>Itens</strong> = produtos vendidos; <strong>Ticket Médio</strong> = valor médio por venda; <strong>% Período</strong> = peso do dia no total.</div>
        <div class="table-responsive">
            <table class="pbi-table" id="diarias-tabela">
                <thead>
                    <tr>
                        <th class="th-sort" data-col="data" style="cursor:pointer">Data <i class="bi bi-arrow-down-up ms-1" style="font-size:.7rem;opacity:.5"></i></th>
                        <th class="th-sort text-center" data-col="diaSem" style="cursor:pointer">Dia <i class="bi bi-arrow-down-up ms-1" style="font-size:.7rem;opacity:.5"></i></th>
                        <th class="th-sort text-end" data-col="qtd" style="cursor:pointer">Notas <i class="bi bi-arrow-down-up ms-1" style="font-size:.7rem;opacity:.5"></i></th>
                        <th class="th-sort text-end" data-col="itens" style="cursor:pointer">Itens <i class="bi bi-arrow-down-up ms-1" style="font-size:.7rem;opacity:.5"></i></th>
                        <th class="th-sort text-end" data-col="ticket" style="cursor:pointer">Ticket Médio <i class="bi bi-arrow-down-up ms-1" style="font-size:.7rem;opacity:.5"></i></th>
                        <th class="th-sort text-end" data-col="total" style="cursor:pointer">Faturamento <i class="bi bi-arrow-down-up ms-1" style="font-size:.7rem;opacity:.5"></i></th>
                        <th style="width:140px">% Periodo</th>
                    </tr>
                </thead>
                <tbody id="diarias-tabela-body">
                    <?php for ($i = 0; $i < 10; $i++): ?>
                    <tr><?php foreach ([70,60,40,40,80,90,60] 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>
                <tfoot>
                    <tr class="pbi-table-total" id="diarias-tabela-footer" style="display:none">
                        <td colspan="2"><strong>Total</strong></td>
                        <td class="text-end" id="tf-qtd"></td>
                        <td class="text-end" id="tf-itens"></td>
                        <td class="text-end" id="tf-ticket"></td>
                        <td class="text-end text-accent" id="tf-total"></td>
                        <td></td>
                    </tr>
                </tfoot>
            </table>
        </div>
    </div>
</div>

<script>
window.__VENDAS = {
    dataIni: <?= json_encode($filtros['data_ini']) ?>,
    dataFim: <?= json_encode($filtros['data_fim']) ?>,
    actionUrl: <?= json_encode($actionUrl) ?>
};
</script>

<script src="/assets/js/echarts.min.js"></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}
@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
.spin{animation:spin .8s linear infinite;display:inline-block}
.th-sort:hover{background:rgba(79,142,247,.08)}
</style>

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

var chartEvol, chartHora, chartDiaSem, chartPgto;
var tabelaRows = [];
var sortCol = 'data', sortAsc = true;

/* helpers */
function moeda(v){ return 'R$ '+parseFloat(v||0).toLocaleString('pt-BR',{minimumFractionDigits:2,maximumFractionDigits:2}); }
function fmt0(v){ return parseInt(v||0).toLocaleString('pt-BR'); }
function fmtPct(v){ return parseFloat(v||0).toLocaleString('pt-BR',{minimumFractionDigits:1,maximumFractionDigits:1})+'%'; }
function fmtKM(v){ v=parseFloat(v||0); if(v>=1e6) return 'R$'+(v/1e6).toFixed(1)+'M'; if(v>=1e3) return 'R$'+(v/1e3).toFixed(0)+'K'; return 'R$'+v.toFixed(0); }
function esc(s){ var d=document.createElement('div'); d.textContent=String(s==null?'':s); return d.innerHTML; }
function cssVar(n){ return getComputedStyle(document.documentElement).getPropertyValue(n).trim(); }
function toStr(s){ return typeof s==='string'?s.substring(0,10):String(s).substring(0,10); }
function fmtData(s){ var p=toStr(s).split('-'); return(p[2]||'')+'/'+(p[1]||'')+'/'+(p[0]||''); }
function diaSem3(s){ return['Dom','Seg','Ter','Qua','Qui','Sex','Sab'][new Date(toStr(s)+'T12:00:00').getDay()]||''; }
function diaSemFull(s){ return['Domingo','Segunda','Terca','Quarta','Quinta','Sexta','Sabado'][new Date(toStr(s)+'T12:00:00').getDay()]||''; }
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 atualizarAbasAnos(anos, dataIni){
    var c = document.querySelector('.pbi-periodo-tabs');
    if(!c) return;
    var au = window.__VENDAS.actionUrl;
    var anoAtual = parseInt(dataIni.substring(0,4));
    var hoje = pbiHoje();
    var html = anos.map(function(a){
        a=parseInt(a);
        return '<a href="'+au+'?data_ini='+a+'-01-01&data_fim='+a+'-12-31" class="pbi-tab-ano'+(a===anoAtual?' active':'')+'" onclick="setPeriodoSession('+a+',0)">'+a+'</a>';
    }).join('');
    c.innerHTML = '<a href="'+au+'?data_ini='+hoje+'&data_fim='+hoje+'" class="pbi-tab-ano"><i class="bi bi-broadcast me-1"></i>Hoje</a>' + html;
}

/* KPIs */
function renderKpis(linhas){
    if(!linhas||!linhas.length){
        document.getElementById('kpi-row').innerHTML='<div class="col-12 text-center text-muted py-3">Nenhuma venda no periodo.</div>';
        return;
    }
    var totFat=0,totQtd=0,totItens=0,melhorFat=0,melhorData='';
    linhas.forEach(function(l){
        var fat=parseFloat(l.TOTAL||0), qtd=parseInt(l.QTD_NOTAS||0);
        totFat+=fat; totQtd+=qtd; totItens+=parseFloat(l.QTD_ITENS||0);
        if(fat>melhorFat){melhorFat=fat;melhorData=l.DATA;}
    });
    var dias=linhas.length, mediaDia=dias>0?totFat/dias:0, ticket=totQtd>0?totFat/totQtd:0;
    var kpis=[
        {label:'Faturamento Total',  val:moeda(totFat),   sub:'', cls:'text-accent'},
        {label:'Notas Emitidas',     val:fmt0(totQtd),    sub:dias+' dias com venda', cls:''},
        {label:'Ticket Médio',       val:moeda(ticket),   sub:'por nota', cls:''},
        {label:'Média por Dia',      val:moeda(mediaDia), sub:'faturamento médio diário', cls:''},
        {label:'Melhor Dia',         val:moeda(melhorFat),sub:fmtData(melhorData)+' ('+diaSem3(melhorData)+')', cls:'text-success'},
        {label:'Total de Itens',     val:fmt0(totItens),  sub:'itens vendidos', cls:''},
    ];
    document.getElementById('kpi-row').innerHTML = kpis.map(function(k){
        return '<div class="col-6 col-md-4 col-lg-2"><div class="pbi-kpi-card">'
            +'<div class="pbi-kpi-label">'+esc(k.label)+'</div>'
            +'<div class="pbi-kpi-valor '+k.cls+'">'+k.val+'</div>'
            +(k.sub?'<div class="pbi-kpi-sub text-muted small">'+esc(k.sub)+'</div>':'')
            +'</div></div>';
    }).join('');
}

/* Evolucao */
function renderEvol(linhas){
    var el=document.getElementById('diarias-evol-chart');
    if(!el) return;
    if(!chartEvol) chartEvol=echarts.init(el);
    if(!linhas||!linhas.length){chartEvol.clear();return;}

    var sorted=linhas.slice().sort(function(a,b){return toStr(a.DATA)<toStr(b.DATA)?-1:1;});
    var labels=[],totais=[],qtds=[];
    sorted.forEach(function(l){
        var ds=toStr(l.DATA);
        labels.push(ds.substring(8,10)+'/'+ds.substring(5,7));
        totais.push(parseFloat(l.TOTAL||0));
        qtds.push(parseInt(l.QTD_NOTAS||0));
    });

    var ca=cssVar('--pbi-accent')||'#4f8ef7';
    var cm=cssVar('--pbi-muted')||'#64748b';
    var cb=cssVar('--pbi-border')||'#e2e8f0';
    var amber='#f59e0b';
    var many=labels.length;

    chartEvol.setOption({
        backgroundColor:'transparent',
        tooltip:{trigger:'axis',axisPointer:{type:'shadow'},formatter:function(p){
            var i=p[0].dataIndex;
            return '<b>'+labels[i]+'</b><br/>Fat: <b>'+moeda(totais[i])+'</b><br/>Notas: <b>'+fmt0(qtds[i])+'</b>';
        }},
        grid:{left:55,right:50,top:15,bottom:many>20?45:30},
        xAxis:{type:'category',data:labels,axisLabel:{fontSize:10,color:cm,interval:many>60?6:many>30?2:0,rotate:many>20?45:0}},
        yAxis:[
            {type:'value',axisLabel:{fontSize:10,formatter:function(v){return fmtKM(v);},color:cm},splitLine:{lineStyle:{color:cb}}},
            {type:'value',axisLabel:{fontSize:10,formatter:function(v){return fmt0(v);},color:amber},splitLine:{show:false}}
        ],
        series:[
            {name:'Faturamento',type:'bar',yAxisIndex:0,data:totais,barMaxWidth:30,itemStyle:{color:ca,borderRadius:[2,2,0,0]}},
            {name:'Notas',type:'line',yAxisIndex:1,data:qtds,smooth:true,lineStyle:{color:amber,width:2},itemStyle:{color:amber},symbol:many>60?'none':'circle',symbolSize:4}
        ]
    },true);
}

/* Por Hora */
function renderHora(porHora){
    var el=document.getElementById('diarias-hora-chart');
    var msg=document.getElementById('diarias-hora-msg');
    if(!el) return;
    if(!porHora||!porHora.length){el.style.display='none';if(msg)msg.style.display='';return;}
    el.style.display='';if(msg)msg.style.display='none';
    if(!chartHora) chartHora=echarts.init(el);

    var horas=[],totais=[],qtds=[],horaMap={};
    porHora.forEach(function(h){horaMap[parseInt(h.HORA||0)]=h;});
    for(var i=0;i<24;i++){
        horas.push((i<10?'0':'')+i+'h');
        var h=horaMap[i];
        totais.push(h?parseFloat(h.FATURAMENTO||0):0);
        qtds.push(h?parseInt(h.QTD||0):0);
    }
    var maxV=Math.max.apply(null,totais);
    var ca=cssVar('--pbi-accent')||'#4f8ef7';
    var cm=cssVar('--pbi-muted')||'#64748b';
    var cb=cssVar('--pbi-border')||'#e2e8f0';

    chartHora.setOption({
        backgroundColor:'transparent',
        tooltip:{trigger:'axis',formatter:function(p){var i=p[0].dataIndex;return horas[i]+'<br/>Fat: <b>'+moeda(totais[i])+'</b><br/>Qtd: <b>'+fmt0(qtds[i])+'</b>';}},
        grid:{left:50,right:10,top:10,bottom:30},
        xAxis:{type:'category',data:horas,axisLabel:{fontSize:9,interval:3,color:cm}},
        yAxis:{type:'value',axisLabel:{fontSize:9,formatter:function(v){return fmtKM(v);},color:cm},splitLine:{lineStyle:{color:cb}}},
        series:[{type:'bar',data:totais.map(function(v){return{value:v,itemStyle:{color:v===maxV&&maxV>0?'#22c55e':ca,borderRadius:[2,2,0,0]}};}),barMaxWidth:18}]
    },true);
}

/* Por Dia Semana */
function renderDiaSem(diaSemana){
    var el=document.getElementById('diarias-diasem-chart');
    if(!el) return;
    if(!chartDiaSem) chartDiaSem=echarts.init(el);

    var nomes=[],totais=[],qtds=[];
    diaSemana.forEach(function(d){
        var n=(d.dia||'').replace('-feira','').replace('Domingo','Dom').replace('Sabado','Sab').replace('Sábado','Sab');
        nomes.push(n);
        totais.push(parseFloat(d.venda||0));
        qtds.push(parseInt(d.qtd||0));
    });
    var maxV=Math.max.apply(null,totais);
    var cm=cssVar('--pbi-muted')||'#64748b';
    var cb=cssVar('--pbi-border')||'#e2e8f0';

    chartDiaSem.setOption({
        backgroundColor:'transparent',
        tooltip:{trigger:'axis',axisPointer:{type:'shadow'},formatter:function(p){
            var i=p[0].dataIndex;
            return nomes[i]+'<br/>Fat: <b>'+moeda(totais[i])+'</b><br/>Notas: <b>'+fmt0(qtds[i])+'</b>';
        }},
        grid:{left:55,right:10,top:10,bottom:30},
        xAxis:{type:'category',data:nomes,axisLabel:{fontSize:10,color:cm}},
        yAxis:{type:'value',axisLabel:{fontSize:10,formatter:function(v){return fmtKM(v);},color:cm},splitLine:{lineStyle:{color:cb}}},
        series:[{type:'bar',data:totais.map(function(v){return{value:v,itemStyle:{color:v===maxV&&maxV>0?'#22c55e':'#60a5fa',borderRadius:[2,2,0,0]}};})}]
    },true);
}

/* Forma de Pagamento */
function renderPgto(tipos){
    var el=document.getElementById('diarias-pgto-chart');
    if(!el) return;
    if(!chartPgto) chartPgto=echarts.init(el);
    var ct=cssVar('--pbi-text')||'#1e293b';
    var data=tipos.map(function(t){
        var label=(t.label||'').trim();
        var norm=label.normalize?label.normalize('NFD').replace(/[̀-ͯ]/g,'').toLowerCase():label.toLowerCase();
        var cor=norm.indexOf('dinheiro')!==-1||norm.indexOf('pix')!==-1?'#22c55e':norm.indexOf('debito')!==-1?'#3b82f6':norm.indexOf('credito')!==-1?'#f97316':'#94a3b8';
        return{value:parseFloat(t.total||0),name:label,itemStyle:{color:cor}};
    }).filter(function(d){return d.value>0;});
    var totalPgto=data.reduce(function(a,d){return a+(parseFloat(d.value)||0);},0);
    var fmtWideD = function(name){var v=0;for(var i=0;i<data.length;i++){if(data[i].name===name){v=data[i].value;break;}}return name+'  ·  '+moeda(v);};
    var fmtNarrowD = function(name){ return name; };
    chartPgto.setOption({
        backgroundColor:'transparent',
        title: pbiTotalDonut(totalPgto, '26%', '50%'),
        tooltip:{trigger:'item',appendToBody:true,formatter:function(p){return '<b>'+p.name+'</b><br/>'+moeda(p.value)+' <span style="color:#94a3b8">('+p.percent+'%)</span>';}},
        legend:{type:'scroll',itemGap:8,textStyle:{fontSize:11,color:ct},formatter:fmtWideD},
        series:[{type:'pie',radius:['44%','70%'],center:['26%','50%'],data:data,label:{show:true,position:'inside',formatter:function(p){return p.percent>=5?Math.round(p.percent)+'%':'';},fontSize:11,fontWeight:700,color:'#fff'},emphasis:{scale:true,scaleSize:6}}],
        media: pbiDonutMedia(fmtWideD, fmtNarrowD)
    },true);
}

/* Tabela */
function renderTabela(linhas){
    var badge=document.getElementById('diarias-tabela-badge');
    var tbody=document.getElementById('diarias-tabela-body');
    var footer=document.getElementById('diarias-tabela-footer');
    if(!tbody) return;
    if(badge) badge.textContent=linhas.length+' dias';

    if(!linhas||!linhas.length){
        tbody.innerHTML='<tr><td colspan="7" class="text-center text-muted py-5"><i class="bi bi-inbox fs-2"></i><p class="mt-2 mb-0">Nenhuma venda no periodo.</p></td></tr>';
        return;
    }

    tabelaRows=linhas.map(function(l){
        var ds=toStr(l.DATA);
        return{data:ds,diaSem:diaSemFull(ds),qtd:parseInt(l.QTD_NOTAS||0),itens:parseFloat(l.QTD_ITENS||0),ticket:parseFloat(l.TICKET_MEDIO||0),total:parseFloat(l.TOTAL||0)};
    });

    var totFat=tabelaRows.reduce(function(s,r){return s+r.total;},0);
    var totQtd=tabelaRows.reduce(function(s,r){return s+r.qtd;},0);
    var totItens=tabelaRows.reduce(function(s,r){return s+r.itens;},0);
    var ticketG=totQtd>0?totFat/totQtd:0;

    if(footer){
        footer.style.display='';
        document.getElementById('tf-qtd').innerHTML='<strong>'+fmt0(totQtd)+'</strong>';
        document.getElementById('tf-itens').innerHTML='<strong>'+fmt0(totItens)+'</strong>';
        document.getElementById('tf-ticket').innerHTML='<strong>'+moeda(ticketG)+'</strong>';
        document.getElementById('tf-total').innerHTML='<strong>'+moeda(totFat)+'</strong>';
    }
    desenharTabela(totFat);
}

function desenharTabela(totFat){
    var tbody=document.getElementById('diarias-tabela-body');
    if(!tbody||!tabelaRows.length) return;
    var sorted=tabelaRows.slice().sort(function(a,b){
        var va=a[sortCol],vb=b[sortCol];
        if(typeof va==='string') return sortAsc?(va<vb?-1:va>vb?1:0):(va>vb?-1:va<vb?1:0);
        return sortAsc?va-vb:vb-va;
    });
    var maxFat=Math.max.apply(null,sorted.map(function(r){return r.total;}));
    var html=sorted.map(function(r){
        var pct=totFat>0?r.total/totFat*100:0;
        var bw=Math.min(100,Math.round(pct*10)/10);
        var isMelhor=r.total===maxFat&&maxFat>0;
        return '<tr'+(isMelhor?' style="background:rgba(34,197,94,.1)"':'')+'>'+
            '<td class="fw-semibold">'+fmtData(r.data)+(isMelhor?' &#x1F3C6;':'')+'</td>'+
            '<td class="text-center"><small class="text-muted">'+esc(r.diaSem.substring(0,3))+'</small></td>'+
            '<td class="text-end">'+fmt0(r.qtd)+'</td>'+
            '<td class="text-end text-muted">'+fmt0(r.itens)+'</td>'+
            '<td class="text-end">'+moeda(r.ticket)+'</td>'+
            '<td class="text-end fw-semibold text-accent">'+moeda(r.total)+'</td>'+
            '<td><div class="pbi-progress"><div class="pbi-progress-bar" style="width:'+bw+'%"></div></div><small class="text-muted">'+fmtPct(pct)+'</small></td>'+
            '</tr>';
    }).join('');
    tbody.innerHTML=html;
}

/* Ordenacao */
document.querySelectorAll('#diarias-tabela .th-sort').forEach(function(th){
    th.addEventListener('click',function(){
        var col=th.dataset.col;
        if(sortCol===col){sortAsc=!sortAsc;}else{sortCol=col;sortAsc=false;}
        var totFat=tabelaRows.reduce(function(s,r){return s+r.total;},0);
        desenharTabela(totFat);
    });
});

/* Header */
function atualizarHeader(linhas,dataIni,dataFim){
    var badge=document.getElementById('diarias-badge');
    var label=document.getElementById('diarias-periodo-label');
    var fd=function(d){if(!d)return'';var p=d.substring(0,10).split('-');return(p[2]||'')+'/'+(p[1]||'')+'/'+(p[0]||'');};
    if(badge) badge.textContent=(linhas?linhas.length:0)+' dias';
    if(label) label.textContent=fd(dataIni)+' a '+fd(dataFim);
}

/* Carregar */
function carregarDados(){
    var ini=window.__VENDAS.dataIni;
    var fim=window.__VENDAS.dataFim;
    var qs='?data_ini='+encodeURIComponent(ini)+'&data_fim='+encodeURIComponent(fim);
    apiFetch('/api/vendas/diarias-dash'+qs)
        .then(function(d){
            var linhas=d.linhas||[], porHora=d.por_hora||[], diaSemana=d.dia_semana||[], tiposPgto=d.tipos_pgto||[];
            atualizarHeader(linhas, d.data_ini||ini, d.data_fim||fim);
            atualizarAbasAnos(d.anos||[], d.data_ini||ini);
            renderKpis(linhas);
            renderEvol(linhas);
            renderHora(porHora);
            renderDiaSem(diaSemana);
            renderPgto(tiposPgto);
            renderTabela(linhas);
        })
        .catch(function(e){
            var badge=document.getElementById('diarias-badge');
            if(badge){badge.textContent='Erro';badge.className='badge bg-danger';}
            var label=document.getElementById('diarias-periodo-label');
            if(label) label.textContent='Erro ao carregar: '+e.message;
        });
}

/* Resize */
window.addEventListener('resize',function(){
    if(chartEvol)   chartEvol.resize();
    if(chartHora)   chartHora.resize();
    if(chartDiaSem) chartDiaSem.resize();
    if(chartPgto)   chartPgto.resize();
});

/* Init */
document.addEventListener('DOMContentLoaded',function(){
    carregarDados();
    var btn=document.getElementById('btnDiariasAtualizar');
    if(btn){
        btn.addEventListener('click',function(){
            btn.disabled=true;
            btn.querySelector('i').className='bi bi-arrow-clockwise spin';
            carregarDados();
            setTimeout(function(){btn.disabled=false;btn.querySelector('i').className='bi bi-arrow-clockwise';},1500);
        });
    }
});

})();
</script>
