<?php
$fmt     = fn($v,$d=2) => 'R$ '.number_format((float)$v,$d,',','.');
$fmtData = fn($d) => $d ? substr($d,8,2).'/'.substr($d,5,2).'/'.substr($d,0,4) : '—';
$totalFat = array_sum(array_column($linhas,'TOTAL_NOTA'));
$totalNot = count($linhas);

// ── Dados para gráficos ──────────────────────────────────────────────────────
$porDia = [];
foreach ($linhas as $r) {
    $d = is_object($r['DATA_EMISSAO']) ? $r['DATA_EMISSAO']->format('Y-m-d') : substr((string)$r['DATA_EMISSAO'],0,10);
    $porDia[$d]['fat']  = ($porDia[$d]['fat']  ?? 0) + (float)$r['TOTAL_NOTA'];
    $porDia[$d]['qtd']  = ($porDia[$d]['qtd']  ?? 0) + 1;
}
ksort($porDia);
$diasLabel = array_map(fn($d) => substr($d,8,2).'/'.substr($d,5,2), array_keys($porDia));
$diasFat   = array_map(fn($v) => round($v['fat'],2), array_values($porDia));
$diasQtd   = array_map(fn($v) => $v['qtd'],           array_values($porDia));

$porVend = [];
foreach ($linhas as $r) {
    $v = trim($r['VENDEDOR'] ?: 'Sem vendedor');
    $porVend[$v] = ($porVend[$v] ?? 0) + (float)$r['TOTAL_NOTA'];
}
arsort($porVend);
$porVend = array_slice($porVend, 0, 10, true);
$vendNomes = array_keys($porVend);
$vendFat   = array_map(fn($v) => round($v,2), array_values($porVend));

$qtdOk   = count(array_filter($linhas, fn($r) => ($r['COD_SITUACAO']??0) != 3));
$qtdCanc = count(array_filter($linhas, fn($r) => ($r['COD_SITUACAO']??0) == 3));
?>
<div class="pbi-page-header no-print">
    <h1 class="pbi-page-title"><i class="bi bi-receipt-cutoff me-2 text-accent"></i>Relatório de Vendas</h1>
</div>

<form method="get" class="pbi-filtro-barra mb-3 no-print">
    <div class="pbi-filtro-row">
        <div class="pbi-filtro-field"><label class="pbi-filtro-label">De</label>
            <input type="date" name="data_ini" value="<?= $filtros['dataIni'] ?>" class="pbi-filtro-input form-control"></div>
        <div class="pbi-filtro-field"><label class="pbi-filtro-label">Até</label>
            <input type="date" name="data_fim" value="<?= $filtros['dataFim'] ?>" class="pbi-filtro-input form-control"></div>
        <button type="submit" class="pbi-btn-filtrar btn"><i class="bi bi-funnel me-1"></i>Filtrar</button>
    </div>
</form>

<?php include __DIR__ . '/_header.php' ?>

<?php
// Metadados pro exportador (PDF/Excel)
$_periodoTxt = !empty($filtros['dataIni'])
    ? date('d/m/Y', strtotime($filtros['dataIni'])).' a '.date('d/m/Y', strtotime($filtros['dataFim']))
    : '';
?>
<script type="application/json" id="relatorio-meta"><?= json_encode([
    'titulo'  => 'Relatório de Vendas',
    'empresa' => $empresa ?? '',
    'periodo' => $_periodoTxt,
    'totais'  => [
        ['label' => 'Total Notas',        'valor' => number_format($totalNot,0,',','.')],
        ['label' => 'Faturamento Total',  'valor' => 'R$ '.number_format($totalFat,2,',','.')],
        ['label' => 'Ticket Médio',       'valor' => $totalNot>0 ? 'R$ '.number_format($totalFat/$totalNot,2,',','.') : '—'],
        ['label' => 'Clientes Únicos',    'valor' => number_format((int)($kpis['QTD_CLIENTES']??0),0,',','.')],
    ],
], JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT) ?></script>

<div class="pbi-kpi-grid mb-3 no-print" data-export-secao="kpis">
    <div class="pbi-kpi-card"><div class="pbi-kpi-label">Total Notas</div><div class="pbi-kpi-value"><?= number_format($totalNot,0,',','.') ?></div></div>
    <div class="pbi-kpi-card"><div class="pbi-kpi-label">Faturamento Total</div><div class="pbi-kpi-value text-accent"><?= $fmt($totalFat) ?></div></div>
    <div class="pbi-kpi-card"><div class="pbi-kpi-label">Ticket Médio</div><div class="pbi-kpi-value"><?= $totalNot>0?$fmt($totalFat/$totalNot):'—' ?></div></div>
    <div class="pbi-kpi-card"><div class="pbi-kpi-label">Clientes Únicos</div><div class="pbi-kpi-value"><?= number_format((int)($kpis['QTD_CLIENTES']??0),0,',','.') ?></div></div>
</div>

<div class="mb-2"><?php include __DIR__ . '/_acoes.php' ?></div>

<?php if ($linhas): ?>
<!-- ── Gráficos ──────────────────────────────────────────────────────────── -->
<div class="row g-3 mb-3 no-print" data-export-secao="graficos">
    <!-- Faturamento diário (área) -->
    <div class="col-12 col-xl-8">
        <div class="pbi-card h-100">
            <div class="pbi-card-header"><i class="bi bi-graph-up me-2 text-accent"></i>Faturamento Diário</div>
            <div class="pbi-hint mb-2" style="margin-top:0">Quanto a loja vendeu (em R$) em cada dia do período. Picos mostram os dias mais fortes.</div>
            <div id="chartFatDiario" style="height:260px"></div>
        </div>
    </div>
    <!-- Situação das notas (donut) -->
    <div class="col-12 col-xl-4">
        <div class="pbi-card h-100">
            <div class="pbi-card-header"><i class="bi bi-pie-chart me-2 text-accent"></i>Situação das Notas</div>
            <div class="pbi-hint mb-2" style="margin-top:0">Proporção de notas concluídas (OK) e canceladas no período.</div>
            <div id="chartSituacao" style="height:260px"></div>
        </div>
    </div>
    <!-- Misto: qtd notas + faturamento por dia -->
    <div class="col-12 col-xl-7">
        <div class="pbi-card h-100">
            <div class="pbi-card-header"><i class="bi bi-bar-chart me-2 text-accent"></i>Qtd. Notas × Faturamento por Dia</div>
            <div class="pbi-hint mb-2" style="margin-top:0">Compara o número de vendas (barras) com o valor faturado (linha) em cada dia.</div>
            <div id="chartMisto" style="height:260px"></div>
        </div>
    </div>
    <!-- Top vendedores (barras horizontais) -->
    <div class="col-12 col-xl-5">
        <div class="pbi-card h-100">
            <div class="pbi-card-header"><i class="bi bi-person-badge me-2 text-accent"></i>Top Vendedores</div>
            <div class="pbi-hint mb-2" style="margin-top:0">Os 10 vendedores que mais faturaram (em R$) no período.</div>
            <div id="chartVendedores" style="height:260px"></div>
        </div>
    </div>
</div>
<?php endif; ?>

<!-- ── Tabela ───────────────────────────────────────────────────────────── -->
<div class="pbi-card" data-export-secao="dados">
    <div class="pbi-card-header d-flex justify-content-between">
        <span><i class="bi bi-receipt-cutoff me-2"></i>Notas de Venda</span>
        <small class="text-muted no-print"><?= $totalNot ?> registros · <?= date('d/m/Y',strtotime($filtros['dataIni'])) ?> a <?= date('d/m/Y',strtotime($filtros['dataFim'])) ?></small>
    </div>
    <div class="pbi-hint mb-2" style="margin-top:0">Lista cada nota de venda do período. <strong>Série</strong> = série fiscal da nota; <strong>Total</strong> = valor da nota; <strong>Situação</strong>: OK = válida, Canc. = cancelada.</div>
    <div class="table-responsive">
        <table class="pbi-table pbi-table-print">
            <thead><tr>
                <th>Data</th><th>Nota</th><th>Série</th>
                <th>Cliente</th><th>Vendedor</th>
                <th class="text-end">Total</th><th>Situação</th>
            </tr></thead>
            <tbody>
            <?php foreach($linhas as $r): ?>
            <tr>
                <td><?= $fmtData(is_object($r['DATA_EMISSAO'])?$r['DATA_EMISSAO']->format('Y-m-d'):(string)$r['DATA_EMISSAO']) ?></td>
                <td><?= $r['NR_NOTA'] ?></td>
                <td><?= $r['SERIE'] ?></td>
                <td><?= \App\Core\View::e(mb_substr($r['CLIENTE']??'—',0,35)) ?></td>
                <td><?= \App\Core\View::e(mb_substr($r['VENDEDOR']??'—',0,20)) ?></td>
                <td class="text-end fw-bold"><?= $fmt($r['TOTAL_NOTA']) ?></td>
                <td><span class="badge <?= ($r['COD_SITUACAO']??0)==3?'bg-danger':'bg-success' ?>"><?= ($r['COD_SITUACAO']??0)==3?'Canc.':'OK' ?></span></td>
            </tr>
            <?php endforeach; ?>
            <?php if(!$linhas): ?><tr><td colspan="7" class="text-center text-muted py-3">Sem dados</td></tr><?php endif; ?>
            </tbody>
            <tfoot>
                <tr class="pbi-table-total">
                    <td colspan="5" class="text-end fw-bold">Total:</td>
                    <td class="text-end fw-bold text-accent"><?= $fmt($totalFat) ?></td>
                    <td></td>
                </tr>
            </tfoot>
        </table>
    </div>
</div>

<?php if ($linhas): ?>
<script src="/assets/js/echarts.min.js"></script>
<script>
(function(){
    var diasLabel = <?= json_encode($diasLabel) ?>;
    var diasFat   = <?= json_encode($diasFat) ?>;
    var diasQtd   = <?= json_encode($diasQtd) ?>;
    var vendNomes = <?= json_encode($vendNomes) ?>;
    var vendFat   = <?= json_encode($vendFat) ?>;
    var clrAzul   = '#4f8ef7';
    var clrVerde  = '#22c55e';
    var clrVerm   = '#ef4444';
    var clrAmar   = '#f59e0b';
    var bg        = '#1e2130';
    var txtClr    = '#94a3b8';

    // ── 1. Faturamento diário (área) ─────────────────────────────────────────
    var c1 = echarts.init(document.getElementById('chartFatDiario'), null, {renderer:'canvas'});
    c1.setOption({
        backgroundColor: 'transparent',
        tooltip: { trigger:'axis', formatter: function(p){ return p[0].axisValue + '<br/>R$ ' + p[0].value.toLocaleString('pt-BR',{minimumFractionDigits:2}); } },
        grid: { left:60, right:20, top:20, bottom:40 },
        xAxis: { type:'category', data: diasLabel, axisLabel:{ color:txtClr, fontSize:11 }, axisLine:{lineStyle:{color:'#334155'}} },
        yAxis: { type:'value', axisLabel:{ color:txtClr, fontSize:11, formatter: function(v){ return 'R$'+v.toLocaleString('pt-BR'); } }, splitLine:{lineStyle:{color:'#1e293b'}} },
        series:[{ type:'line', data: diasFat, smooth:true, symbol:'none',
            areaStyle:{ color:{ type:'linear', x:0,y:0,x2:0,y2:1, colorStops:[{offset:0,color:'rgba(79,142,247,.45)'},{offset:1,color:'rgba(79,142,247,.02)'}] } },
            lineStyle:{ color:clrAzul, width:2 }, itemStyle:{color:clrAzul} }]
    });

    // ── 2. Situação (donut) ───────────────────────────────────────────────────
    var c2 = echarts.init(document.getElementById('chartSituacao'), null, {renderer:'canvas'});
    c2.setOption({
        backgroundColor: 'transparent',
        title: pbiTotalDonut(<?= (int)$qtdOk + (int)$qtdCanc ?>, '50%', '40%', String, 'Notas'),
        tooltip: { trigger:'item', formatter:'{b}: {c} ({d}%)' },
        legend: { type:'scroll', orient:'horizontal', bottom:0, left:'center', textStyle:{fontSize:10,color:txtClr}, itemWidth:11, itemHeight:11, pageIconSize:9 },
        series:[{ type:'pie', radius:['42%','64%'], center:['50%','40%'],
            label:{ show:true, position:'inside', formatter:function(p){return p.percent>=6?Math.round(p.percent)+'%':'';}, fontSize:10, fontWeight:700, color:'#fff' }, emphasis:{scale:true,scaleSize:6},
            data:[
                { value: <?= $qtdOk ?>,   name:'OK',         itemStyle:{color:clrVerde} },
                { value: <?= $qtdCanc ?>, name:'Canceladas', itemStyle:{color:clrVerm}  }
            ]
        }]
    });

    // ── 3. Misto: barras qtd + linha faturamento ──────────────────────────────
    var c3 = echarts.init(document.getElementById('chartMisto'), null, {renderer:'canvas'});
    c3.setOption({
        backgroundColor: 'transparent',
        tooltip: { trigger:'axis' },
        legend: { top:0, textStyle:{color:txtClr} },
        grid: { left:55, right:60, top:35, bottom:40 },
        xAxis: { type:'category', data: diasLabel, axisLabel:{color:txtClr,fontSize:10}, axisLine:{lineStyle:{color:'#334155'}} },
        yAxis: [
            { type:'value', name:'Notas', nameTextStyle:{color:txtClr}, axisLabel:{color:txtClr,fontSize:10}, splitLine:{lineStyle:{color:'#1e293b'}} },
            { type:'value', name:'R$',    nameTextStyle:{color:txtClr}, axisLabel:{color:txtClr,fontSize:10,formatter:function(v){return 'R$'+v.toLocaleString('pt-BR');}}, splitLine:{show:false} }
        ],
        series:[
            { name:'Qtd. Notas', type:'bar',  data: diasQtd, yAxisIndex:0, itemStyle:{color:'rgba(79,142,247,.6)',borderRadius:[3,3,0,0]} },
            { name:'Faturamento', type:'line', data: diasFat, yAxisIndex:1, smooth:true, symbol:'none', lineStyle:{color:clrAmar,width:2}, itemStyle:{color:clrAmar} }
        ]
    });

    // ── 4. Top vendedores (barras horizontais) ────────────────────────────────
    var c4 = echarts.init(document.getElementById('chartVendedores'), null, {renderer:'canvas'});
    c4.setOption({
        backgroundColor: 'transparent',
        tooltip: { trigger:'axis', formatter: function(p){ return p[0].name + '<br/>R$ ' + p[0].value.toLocaleString('pt-BR',{minimumFractionDigits:2}); } },
        grid: { left:8, right:60, top:10, bottom:30, containLabel:true },
        xAxis: { type:'value', axisLabel:{color:txtClr,fontSize:10,formatter:function(v){return 'R$'+v.toLocaleString('pt-BR');}}, splitLine:{lineStyle:{color:'#1e293b'}} },
        yAxis: { type:'category', data: vendNomes.slice().reverse(), axisLabel:{color:txtClr,fontSize:11,overflow:'break'}, axisLine:{lineStyle:{color:'#334155'}} },
        series:[{ type:'bar', data: vendFat.slice().reverse(),
            itemStyle:{ color: function(p){ var c=[clrAzul,'#7c3aed','#0ea5e9','#10b981',clrAmar]; return c[p.dataIndex%c.length]; }, borderRadius:[0,3,3,0] },
            label:{ show:true, position:'right', color:'#e2e8f0', fontSize:10, formatter:function(p){ return 'R$'+p.value.toLocaleString('pt-BR',{minimumFractionDigits:0}); } }
        }]
    });

    // Responsivo
    window.addEventListener('resize', function(){ c1.resize(); c2.resize(); c3.resize(); c4.resize(); });
})();
</script>
<?php endif; ?>
