<?php

require '../conexao/conexao.php';
//require '../sessao.php';
require_once 'calculos.php';

// 1. CAPTURA SEGURA DE DADOS
$ano     = $_REQUEST['ano'] ?? date('Y');
$mes     = $_REQUEST['mes'] ?? date('m');
$periodo = $_REQUEST['periodo'] ?? 'mes'; 
$semana  = $_REQUEST['semana'] ?? null;
$filial  = $_REQUEST['filial'] ?? null;
$vendedor = null; 

$mes = str_pad($mes, 2, '0', STR_PAD_LEFT);

// 2. DEFINIÇÃO RIGOROSA DAS DATAS (INTERVALO)
$ultimo_dia = date("t", mktime(0, 0, 0, $mes, 1, $ano));
$data_inicio_sql = "$ano-$mes-01";
$data_fim_sql    = "$ano-$mes-$ultimo_dia";

if ($periodo == 1) {
    $data_fim_sql = "$ano-$mes-15";
} elseif ($periodo == 2) {
    $data_inicio_sql = "$ano-$mes-16";
}

// Se tiver semana válida, sobrescreve as datas
if (!empty($semana) && $semana != 'mes') {
    $periodo_semana = $configuracoes->getPeriodoSemana($ano, $mes, $semana);
    if ($periodo_semana) {
        $data_inicio_sql = $periodo_semana['data_inicial'];
        $data_fim_sql    = $periodo_semana['data_final'];
    }
}

$data_fim_visual = $data_fim_sql;

// Limitar a data final até o dia anterior (Ontem) ---
if (!empty($data_fim_sql)) {
    $data_ontem = date('Y-m-d', strtotime('-1 day'));
    if ($data_fim_sql > $data_ontem) {
        $data_fim_sql = $data_ontem;
    }
}

// Variáveis visuais
$data_inicio = $data_inicio_sql; 
$data_fim    = $data_fim_visual;

// 3. CONSULTA DE PERCENTUAIS
$sql_percentuais = "SELECT valor_percentual FROM percentual ORDER BY valor_percentual DESC";
$result_percentuais = $connectionmysql->query($sql_percentuais);
$percentualArray = array();
if ($result_percentuais) {
    while ($row_percentual = $result_percentuais->fetch_assoc()) {
        $percentualArray[] = $row_percentual['valor_percentual'];
    }
}

// ---------------------------------------------------------
// 4. CONSULTAS SQL (BLINDADAS CONTRA ERROS)
// ---------------------------------------------------------

// --- MANIPULADO ---
if ($exibirManipulado) {
    $qry_manipulado = "SELECT
        CAST(A1.entregue_dt as DATE) as data,
        CAST(COALESCE(SUM(A1.VALORVENDA_DESC), 0) AS NUMERIC(18,2)) as VALOR
        FROM ATENDIMENTO_A1 A1
        LEFT JOIN UTIL_REL_AG1 (1) AG ON AG.AG1_OP > 0
        LEFT JOIN ATENDIMENTO_CF CF ON A1.CODIGO_ATEND_FL = CF.CODIGO_ATEND_FL AND CF.CANCELAMENTO_CF IS NULL
        LEFT JOIN MEDICO M ON M.CODIGO = A1.CODIGO_MEDICO
        LEFT JOIN MEDICO_CR CR ON CR.CODIGO = M.CODIGO_CONSELHO_REGIONAL
        INNER JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF)
        WHERE A1.TIPO_ATENDIMENTO = 1 ";

    if (!empty($filial) && $filial !== "Todos") {
        $qry_manipulado .= "AND CODIGO_EMPRESA_PADRAO IN (" . $filial . ") ";
    }
    // Filtro de data obrigatório
    $qry_manipulado .= " AND CAST(A1.entregue_dt as date) BETWEEN '$data_inicio_sql' AND '$data_fim_sql' ";
    $qry_manipulado .= " GROUP BY data";

    $qryResult = ibase_query($connection, $qry_manipulado);
    if (!$qryResult) die("Erro SQL Manipulado: " . ibase_errmsg());
}

// --- REVENDA ---
if ($exibirRevenda) {
    $qry_revenda = "SELECT
            CAST(A1.entregue_dt AS DATE) AS data,               
            CAST(SUM(A3.valorvenda_desc) AS NUMERIC(18,2)) AS VALOR
        FROM atendimento_a3 A3
        INNER JOIN atendimento_a1 A1 ON A3.codigo_atend_a1 = A1.codigo
        INNER JOIN estoque_geral EG ON A3.codigo_produto = EG.codigo
        WHERE A1.tipo_atendimento = 2
            AND A3.excluirproduto_cf IS NULL
            AND A1.cancelamento_lj IS NULL
            AND A3.QUANTIDADE > 0
            AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
            AND A1.STATUS_MOV = '-1'";

    if (!empty($operacoes) && $operacoes != "NULL") {
        $qry_revenda .= " AND A1.codigo_tipooperacao NOT IN ($operacoes)";
    }
    $qry_revenda .= " AND A3.codigo_produto NOT IN ('3024873', '3025044')
            AND EG.codigo_estoque_classificacao NOT IN (300002)";

    if (!empty($filial) && $filial !== "Todos") {
        $qry_revenda .= " AND A1.AVIADA_LJ IN (" . $filial . ") ";
    }
    $qry_revenda .= " AND CAST(A1.entregue_dt as date) BETWEEN '$data_inicio_sql' AND '$data_fim_sql' ";
    $qry_revenda .= " GROUP BY CAST(A1.entregue_dt AS DATE)";
    
    $qryResultRevenda = ibase_query($connection, $qry_revenda);
    if (!$qryResultRevenda) die("Erro SQL Revenda: " . ibase_errmsg());
}

// --- MARCA PRÓPRIA ---
if ($exibirMarcaPropria) {
    $qry_marca = "SELECT
            CAST(A1.entregue_dt AS DATE) AS data,
            CAST(SUM(A3.valorvenda_desc) AS NUMERIC(18,2)) AS VALOR
        FROM atendimento_a3 A3
        INNER JOIN atendimento_a1 A1 ON A3.codigo_atend_a1 = A1.codigo
        INNER JOIN estoque_geral EG ON A3.codigo_produto = EG.codigo
        WHERE A1.tipo_atendimento = 2
            AND A3.excluirproduto_cf IS NULL
            AND A1.cancelamento_lj IS NULL
            AND A3.QUANTIDADE > 0
            AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
            AND A1.STATUS_MOV = '-1'";

    if (!empty($operacoes) && $operacoes != "NULL") {
        $qry_marca .= " AND A1.codigo_tipooperacao NOT IN ($operacoes)";
    }
    $qry_marca .= " AND (A3.codigo_produto IN ('3024873', '3025044') OR EG.codigo_estoque_classificacao IN (300002))";

    if (!empty($filial) && $filial !== "Todos") {
        $qry_marca .= " AND A1.AVIADA_LJ IN (" . $filial . ") ";
    }
    $qry_marca .= " AND CAST(A1.entregue_dt as date) BETWEEN '$data_inicio_sql' AND '$data_fim_sql' ";
    $qry_marca .= " GROUP BY CAST(A1.entregue_dt AS DATE) ";
    
    $qryResultMarca = ibase_query($connection, $qry_marca);
    if (!$qryResultMarca) die("Erro SQL Marca: " . ibase_errmsg());
}

// --- TERCEIROS ---
if ($vendedor == null) {
    $sql_terceiros = "SELECT data_lancamento, SUM(t.valor) AS valor_terceiros
    FROM pedido_terceiro as t
    WHERE data_lancamento BETWEEN '$data_inicio_sql' AND '$data_fim_sql' ";

    if ($filial && $filial != "Todos") {
        $sql_terceiros .= " AND t.cod_filial IN ($filial) ";
    }
    $sql_terceiros .= " GROUP BY data_lancamento";
    $result_terceiros = $connectionmysql->query($sql_terceiros);
}

// ---------------------------------------------------------
// 5. PROCESSAMENTO DOS DADOS EM ARRAYS
// ---------------------------------------------------------
$dataManipulado = [];
$dataTerceiro = [];
$dataRevenda = [];
$dataMarca = [];
$totalManipulado = 0;
$totalTerceiro = 0;
$totalRevenda = 0;
$totalMarca = 0;

if ($exibirManipulado) {
    while ($row = ibase_fetch_assoc($qryResult)) {
        $dataManipulado[$row['DATA']] = $row['VALOR'];
        $totalManipulado += $row['VALOR'];
    }
    if ($vendedor == null && isset($result_terceiros) && $result_terceiros) {
        while ($rowterceiro = $result_terceiros->fetch_assoc()) {
            $dataTerceiro[$rowterceiro['data_lancamento']] = $rowterceiro['valor_terceiros'];
            $totalTerceiro += $rowterceiro['valor_terceiros'];
        }
    }
}
if ($exibirRevenda) {
    while ($rowRevenda = ibase_fetch_assoc($qryResultRevenda)) {
        $dataRevenda[$rowRevenda['DATA']] = $rowRevenda['VALOR'];
        $totalRevenda += $rowRevenda['VALOR'];
    }
}
if ($exibirMarcaPropria) {
    while ($rowMarca = ibase_fetch_assoc($qryResultMarca)) {
        $dataMarca[$rowMarca['DATA']] = $rowMarca['VALOR'];
        $totalMarca += $rowMarca['VALOR'];
    }
}

// Junta todas as datas encontradas
// $allDates = [];
// if (!empty($dataManipulado)) $allDates = array_merge($allDates, array_keys($dataManipulado));
// if (!empty($dataRevenda))    $allDates = array_merge($allDates, array_keys($dataRevenda));
// if (!empty($dataMarca))      $allDates = array_merge($allDates, array_keys($dataMarca));
// $allDates = array_unique($allDates);

// // Filtra visualmente para garantir que não apareçam datas de outros meses
// $filteredDates = array_filter($allDates, function ($data) use ($data_inicio_sql, $data_fim_sql) {
//     return ($data >= $data_inicio_sql && $data <= $data_fim_sql);
// });
// sort($filteredDates);

// Junta todas as datas do mês
$x = new DateTime($data_inicio_sql);
$y = new DateTime($data_fim_visual);

// IMPORTANTE: incluir o último dia
$y->modify('+1 day');

// Intervalo de 1 dia
$intervalo = new DateInterval('P1D');

// Cria o período
$xy = new DatePeriod($x, $intervalo, $y);

// Array final de datas
$filteredDates = [];

foreach ($xy as $data) {
    $filteredDates[] = $data->format('Y-m-d');
}



if ($vendedor == null) {
    $valores = $_SESSION['valores'] ?? []; // Prevenção de erro se a sessão estiver vazia
}

// ---------------------------------------------------------
// 6. EXIBIÇÃO (TABELA ÚNICA)
// ---------------------------------------------------------
echo "<table id='percentualGeral' class='table table-striped table-bordered dt-responsive nowrap'>
        <thead>
             <tr class='text-center'>
                 <th>Data</th>";

if (isset($_SESSION['valores']['total_terceiros']) && $_SESSION['valores']['total_terceiros'] != 0 && $exibirManipulado) {
    echo "<th>Terceiro</th>";
}
if ($exibirManipulado) echo "<th>Manipulado</th>";
if ($exibirRevenda) echo " <th>Revenda</th>";
if ($exibirMarcaPropria) echo "  <th>Marca Própria</th>";

echo "  <th>Total Dia</th>
            </tr>
        </thead>
        <tbody>";

// Loop Principal
foreach ($filteredDates as $data) {
    $manipulado = $dataManipulado[$data] ?? 0;
    $revenda = $dataRevenda[$data] ?? 0;
    $marca_propria = $dataMarca[$data] ?? 0;
    $Terceiro = $dataTerceiro[$data] ?? 0;
    $total = $manipulado + $revenda + $marca_propria + $Terceiro;

    echo "<tr class='text-center'>
            <td width='87'>" . htmlspecialchars(date("d/m/Y", strtotime($data))) . "</td> ";
    
    if (isset($_SESSION['valores']['total_terceiros']) && $_SESSION['valores']['total_terceiros'] != 0 && $exibirManipulado) {
        echo " <td width='89'><div align='center'>R$ " . htmlspecialchars(number_format($Terceiro, 2, ',', '.')) . "</div></td>";
    }
    if ($exibirManipulado) {
        echo "<td width='89'><div align='center'>R$ " . htmlspecialchars(number_format($manipulado, 2, ',', '.')) . "</div></td>";
    }
    if ($exibirRevenda) {
        echo "<td width='89'><div align='center'>R$ " . htmlspecialchars(number_format($revenda, 2, ',', '.')) . "</div></td>";
    }
    if ($exibirMarcaPropria) {
        echo " <td width='89'><div align='center'>R$ " . htmlspecialchars(number_format($marca_propria, 2, ',', '.')) . "</div></td>";
    }
    echo "<td width='89'><div align='center'>R$ " . htmlspecialchars(number_format($total, 2, ',', '.')) . "</div></td>
          </tr>";
}

// Linha de Totais
echo "<tr class='text-center' style='background-color: #f0f0f0;'>
        <td width='87'><div align='center'><b>Total</b></div></td>";

if (isset($_SESSION['valores']['total_terceiros']) && $_SESSION['valores']['total_terceiros'] != 0 && $exibirManipulado) {
    echo "<td width='89'><div align='center'><b>R$ " . htmlspecialchars(number_format($totalTerceiro, 2, ',', '.')) . "</b></div></td>";
}
if ($exibirManipulado) {
    echo "<td width='89'><div align='center'><b>R$ " . htmlspecialchars(number_format($totalManipulado, 2, ',', '.')) . "</b></div></td>";
}
if ($exibirRevenda) {
    echo "  <td width='89'><div align='center'><b>R$ " . htmlspecialchars(number_format($totalRevenda, 2, ',', '.')) . "</b></div></td>";
}
if ($exibirMarcaPropria) {
    echo "  <td width='89'><div align='center'><b>R$ " . htmlspecialchars(number_format($totalMarca, 2, ',', '.')) . "</b></div></td>";
}
echo "  <td width='89'><div align='center'><b>R$ " . htmlspecialchars(number_format($totalTerceiro + $totalManipulado + $totalRevenda + $totalMarca, 2, ',', '.')) . "</b></div></td>
      </tr>";

echo "</tbody>
      </table>";

// Liberação de memória
if ($exibirManipulado && isset($qryResult)) ibase_free_result($qryResult);
if ($exibirRevenda && isset($qryResultRevenda)) ibase_free_result($qryResultRevenda);
if ($exibirMarcaPropria && isset($qryResultMarca)) ibase_free_result($qryResultMarca);

?>