<?php /* Depto de Engenharia e Automação - Master Automação - Autor: Derlivon Silva */ ?>
<?php
$fmt  = fn($v,$d=2) => 'R$ '.number_format((float)$v,$d,',','.');
$perc = fn($v) => number_format((float)$v,1,',','.').'%';
$total = count($linhas);

$totalVendaEst = array_sum(array_column($linhas,'VALOR_ESTOQUE_VENDA'));
$totalCustoEst = array_sum(array_column($linhas,'VALOR_ESTOQUE_CUSTO'));
$margemMedia   = $totalVendaEst > 0 ? ($totalVendaEst - $totalCustoEst) / $totalVendaEst * 100 : 0;

// Faixas de margem
$faixas = ['<20%' => 0, '20-40%' => 0, '40-60%' => 0, '>60%' => 0];
foreach ($linhas as $r) {
    $m = (float)$r['MARGEM_PERC'];
    if ($m < 20)       $faixas['<20%']++;
    elseif ($m < 40)   $faixas['20-40%']++;
    elseif ($m < 60)   $faixas['40-60%']++;
    else               $faixas['>60%']++;
}

// Top 10 maior margem % e menor margem %
$top10alto  = array_slice($linhas, 0, 10);
$top10baixo = array_slice(array_reverse($linhas), 0, 10);
?>
<div class="pbi-page-header">
    <h1 class="pbi-page-title"><i class="bi bi-percent me-2 text-accent"></i>Margem por Produto</h1>
</div>

<form method="get" class="pbi-filtro-barra mb-3">
    <div class="pbi-filtro-row">
        <div class="pbi-filtro-field">
            <label class="pbi-filtro-label">Buscar produto</label>
            <input type="text" name="busca" value="<?= \App\Core\View::e($busca??'') ?>" placeholder="Nome do produto..." 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>
        <a href="/relatorios/margem?formato=csv&busca=<?= urlencode($busca??'') ?>" class="btn btn-outline-secondary btn-sm ms-auto">
            <i class="bi bi-download me-1"></i>Exportar CSV
        </a>
    </div>
</form>

<script type="application/json" id="relatorio-meta"><?= json_encode([
    'titulo' => 'Margem por Produto',
    'empresa' => $empresa ?? '',
    'totais' => [
        ['label' => 'Produtos', 'valor' => number_format($total,0,',','.')],
        ['label' => 'Estoque (Venda)', 'valor' => $fmt($totalVendaEst)],
        ['label' => 'Estoque (Custo)', 'valor' => $fmt($totalCustoEst)],
        ['label' => 'Margem Média', 'valor' => $perc($margemMedia)],
    ],
], JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT) ?></script>

<!-- KPIs -->
<div class="pbi-kpi-grid mb-3" data-export-secao="kpis">
    <div class="pbi-kpi-card"><div class="pbi-kpi-label">Produtos</div><div class="pbi-kpi-value"><?= number_format($total,0,',','.') ?></div></div>
    <div class="pbi-kpi-card"><div class="pbi-kpi-label">Estoque (Venda)</div><div class="pbi-kpi-value text-accent"><?= $fmt($totalVendaEst) ?></div></div>
    <div class="pbi-kpi-card"><div class="pbi-kpi-label">Estoque (Custo)</div><div class="pbi-kpi-value"><?= $fmt($totalCustoEst) ?></div></div>
    <div class="pbi-kpi-card"><div class="pbi-kpi-label">Margem Média</div>
        <div class="pbi-kpi-value <?= $margemMedia>=40?'text-success':($margemMedia>=20?'text-warning':'text-danger') ?>"><?= $perc($margemMedia) ?></div>
    </div>
</div>

<?php if ($linhas): ?>
<!-- Gráficos -->
<div class="row g-3 mb-3" data-export-secao="graficos">
    <div class="col-12 col-md-4">
        <div class="pbi-card h-100">
            <div class="pbi-card-header"><i class="bi bi-pie-chart me-2 text-accent"></i>Distribuição de Margem</div>
            <div class="pbi-hint mb-2" style="margin-top:0">Quantos produtos caem em cada faixa de margem (lucro sobre o preço de venda). Margem baixa pede atenção no preço.</div>
            <div id="chartFaixas" style="height:240px"></div>
        </div>
    </div>
    <div class="col-12 col-md-8">
        <div class="pbi-card h-100">
            <div class="pbi-card-header"><i class="bi bi-bar-chart me-2 text-accent"></i>Top 10 — Maior Margem %</div>
            <div class="pbi-hint mb-2" style="margin-top:0">Os 10 produtos que mais dão lucro proporcional (maior margem %).</div>
            <div id="chartTopAlto" style="height:240px"></div>
        </div>
    </div>
    <div class="col-12">
        <div class="pbi-card">
            <div class="pbi-card-header"><i class="bi bi-exclamation-triangle me-2 text-warning"></i>10 Produtos com Menor Margem (atenção)</div>
            <div class="pbi-hint mb-2" style="margin-top:0">Os 10 produtos que menos lucram (menor margem %). Reveja preço ou custo desses itens.</div>
            <div id="chartTopBaixo" style="height:200px"></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-table me-2"></i>Todos os Produtos</span>
        <small class="text-muted"><?= $total ?> itens · ordenado por margem %</small>
    </div>
    <div class="pbi-hint mb-2" style="margin-top:0">Lucro de cada produto. <strong>Margem R$</strong> = preço de venda menos o custo; <strong>Margem %</strong> = esse lucro sobre o preço de venda; <strong>Val. Estoque (Venda)</strong> = estoque atual a preço de venda.</div>
    <div class="table-responsive">
        <table class="pbi-table">
            <thead><tr>
                <th>Código</th><th>Produto</th><th>Un</th>
                <th class="text-end">Qtd Estoque</th>
                <th class="text-end">Custo Unit</th>
                <th class="text-end">Preço Venda</th>
                <th class="text-end">Margem R$</th>
                <th class="text-center">Margem %</th>
                <th class="text-end">Val. Estoque (Venda)</th>
            </tr></thead>
            <tbody>
            <?php foreach($linhas as $r):
                $m = (float)$r['MARGEM_PERC'];
                $cor = $m >= 40 ? 'text-success' : ($m >= 20 ? 'text-warning' : 'text-danger');
                $bg  = $m < 10 ? 'style="background:rgba(239,68,68,.06)"' : '';
            ?>
            <tr <?= $bg ?>>
                <td class="fw-semibold"><?= \App\Core\View::e($r['COD_ITEM']??'') ?></td>
                <td class="fw-semibold"><?= \App\Core\View::e(mb_substr($r['DESCRICAO']??'—',0,45)) ?></td>
                <td><?= $r['COD_UNIDADE'] ?></td>
                <td class="text-end"><?= number_format((float)$r['QTD'],2,',','.') ?></td>
                <td class="text-end"><?= $fmt($r['CUSTO_FINAL']) ?></td>
                <td class="text-end"><?= $fmt($r['PRECO_VENDA']) ?></td>
                <td class="text-end"><?= $fmt($r['MARGEM_VALOR']) ?></td>
                <td class="text-center"><span class="fw-bold <?= $cor ?>"><?= $perc($m) ?></span></td>
                <td class="text-end"><?= $fmt($r['VALOR_ESTOQUE_VENDA']) ?></td>
            </tr>
            <?php endforeach; ?>
            <?php if(!$linhas): ?><tr><td colspan="9" class="text-center text-muted py-3">Sem dados</td></tr><?php endif; ?>
            </tbody>
        </table>
    </div>
</div>

<?php if ($linhas): ?>
<script src="/assets/js/echarts.min.js"></script>
<script>
(function(){
    var txtClr = '#94a3b8';

    // Donut faixas
    var totalFaixas = <?= (int)array_sum($faixas) ?>;
    echarts.init(document.getElementById('chartFaixas')).setOption({
        backgroundColor:'transparent',
        title: pbiTotalDonut(totalFaixas, '50%', '40%', String, 'Produtos'),
        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:<?= $faixas['<20%'] ?>,   name:'< 20%',   itemStyle:{color:'#ef4444'}},
                {value:<?= $faixas['20-40%'] ?>, name:'20-40%',  itemStyle:{color:'#f59e0b'}},
                {value:<?= $faixas['40-60%'] ?>, name:'40-60%',  itemStyle:{color:'#22c55e'}},
                {value:<?= $faixas['>60%'] ?>,   name:'> 60%',   itemStyle:{color:'#4f8ef7'}}
            ]
        }]
    });

    // Top alto
    <?php
    $nTop  = array_map(fn($r) => mb_substr($r['DESCRICAO'],0,22), $top10alto);
    $mTop  = array_map(fn($r) => round((float)$r['MARGEM_PERC'],1), $top10alto);
    ?>
    echarts.init(document.getElementById('chartTopAlto')).setOption({
        backgroundColor:'transparent',
        tooltip:{trigger:'axis',formatter:function(p){return p[0].name+'<br/>'+p[0].value+'%';}},
        grid:{left:160,right:60,top:10,bottom:30},
        xAxis:{type:'value',max:100,axisLabel:{color:txtClr,formatter:'{value}%'},splitLine:{lineStyle:{color:'#1e293b'}}},
        yAxis:{type:'category',data:<?= json_encode(array_reverse($nTop)) ?>,axisLabel:{color:txtClr,fontSize:10}},
        series:[{type:'bar',data:<?= json_encode(array_reverse($mTop)) ?>,
            itemStyle:{color:function(p){var v=p.value;return v>=60?'#4f8ef7':v>=40?'#22c55e':'#f59e0b';},borderRadius:[0,3,3,0]},
            label:{show:true,position:'right',color:'#e2e8f0',formatter:'{c}%'}
        }]
    });

    // Top baixo
    <?php
    $nBaixo = array_map(fn($r) => mb_substr($r['DESCRICAO'],0,28), $top10baixo);
    $mBaixo = array_map(fn($r) => round((float)$r['MARGEM_PERC'],1), $top10baixo);
    ?>
    echarts.init(document.getElementById('chartTopBaixo')).setOption({
        backgroundColor:'transparent',
        tooltip:{trigger:'axis'},
        grid:{left:200,right:60,top:10,bottom:30},
        xAxis:{type:'value',axisLabel:{color:txtClr,formatter:'{value}%'},splitLine:{lineStyle:{color:'#1e293b'}}},
        yAxis:{type:'category',data:<?= json_encode(array_reverse($nBaixo)) ?>,axisLabel:{color:txtClr,fontSize:10}},
        series:[{type:'bar',data:<?= json_encode(array_reverse($mBaixo)) ?>,
            itemStyle:{color:'#ef4444',borderRadius:[0,3,3,0]},
            label:{show:true,position:'right',color:'#e2e8f0',formatter:'{c}%'}
        }]
    });
})();
</script>
<?php endif; ?>
