<?php

require '../conexao/conexao.php';


class ConsultaDadosPerformance
{


    private $connection;

    public function __construct()
    {
        global  $connection; // Acesso às conexões globais

        $this->connection = $connection;
    }

    public function consultaManipulado($ano, $mes, $filial)
    {
        $sql = "SELECT EXTRACT(YEAR FROM A1.entregue_dt) AS ano,
                A1.codigo_empresa_padrao AS cdcon, 
                SUM(A1.VALORVENDA_DESC) AS VALOR_MANIPULADO,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 1 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_janeiro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 2 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_fevereiro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 3 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_marco,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 4 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_abril,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 5 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_maio,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 6 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_junho,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 7 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_julho,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 8 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_agosto,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 9 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_setembro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 10 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_outubro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 11 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_novembro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 12 THEN A1.VALORVENDA_DESC ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_dezembro";


        $sql .= " 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 ($ano && $ano != "Selecione") {
            // Convertendo os anos para inteiros e encontrando o menor ano
            $anoArray = array_map('intval', (array)$ano);
            $anoList = implode(',', $anoArray);
            $minAno = min($anoArray);

            // Adicionando o ano anterior ao menor ano
            $previousYear = $minAno - 1;
            if (!in_array($previousYear, $anoArray)) {
                $anoList .= ",$previousYear";
            }

            $sql .= " AND EXTRACT(YEAR FROM A1.entregue_dt) IN ($anoList)";
        }

        if ($mes && $mes != "Selecione") {
            $sql .= " AND EXTRACT(MONTH FROM A1.entregue_dt) = " . intval($mes);
        }


        if (!empty($filial) && $filial !== "Todos") {
            $filialList = (is_array($filial)) ? implode(",", $filial) : $filial; // Converte para string se for um array
            $sql .= " AND A1.codigo_empresa_padrao IN ($filialList)";
        }

        // Finaliza a query SQL
        $sql .= " AND A1.codigo_tipooperacao NOT IN (5, 159, 174, 184, 185, 186, 187, 188, 190, 216, 221, 234, 235, 236, 237, 242, 246, 261, 296, 297)
       GROUP BY ano, A1.codigo_empresa_padrao";

        // echo $sql;
        // exit;

        return ibase_query($this->connection, $sql);
    }

    public function consultaMarcaPropria($ano, $mes, $filial)
    {
        $sql = "SELECT EXTRACT(YEAR FROM A1.entregue_dt) AS ano,
                A1.AVIADA_LJ as cdconre, 
                SUM(a3.valorvenda_desc) AS VALOR_MARCA_PROPRIA,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 1 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_janeiro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 2 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_fevereiro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 3 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_marco,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 4 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_abril,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 5 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_maio,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 6 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_junho,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 7 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_julho,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 8 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_agosto,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 9 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_setembro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 10 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_outubro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 11 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_novembro,
                CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 12 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_dezembro
            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
        inner join medico md on (md.codigo = a1.codigo_medico)
        left join medico_cr cr on (cr.codigo = md.codigo_conselho_regional)
        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'
        AND A1.codigo_tipooperacao NOT IN (5, 159, 174, 184, 185, 186, 187, 188, 190, 216, 221, 234, 235, 236, 237, 242, 246, 261, 296, 297)
                AND (
            A3.codigo_produto IN ('3024873', '3025044') 
            OR EG.codigo_estoque_classificacao IN (300002) 
        )";

        if ($ano && $ano != "Selecione") {
            // Convertendo os anos para inteiros e encontrando o menor ano
            $anoArray = array_map('intval', (array)$ano);
            $anoList = implode(',', $anoArray);
            $minAno = min($anoArray);

            // Adicionando o ano anterior ao menor ano
            $previousYear = $minAno - 1;
            if (!in_array($previousYear, $anoArray)) {
                $anoList .= ",$previousYear";
            }

            $sql .= " AND EXTRACT(YEAR FROM A1.entregue_dt) IN ($anoList)";
        }

        if ($mes && $mes != "Selecione") {
            $sql .= " AND EXTRACT(MONTH FROM A1.entregue_dt) = " . intval($mes);
        }

        if (!empty($filial) && $filial !== "Todos") {
            $filialList = (is_array($filial)) ? implode(",", $filial) : $filial; // Converte para string se for um array
            $sql .= " AND A1.AVIADA_LJ IN ($filialList)";
        }

        // Finaliza a query SQL
        $sql .= " AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
       AND A1.STATUS_MOV = '-1'
       AND A1.codigo_tipooperacao NOT IN (5, 159, 174, 184, 185, 186, 187, 188, 190, 216, 221, 234, 235, 236, 237, 242, 246, 261, 296, 297)
       GROUP BY ano, A1.AVIADA_LJ";

        return ibase_query($this->connection, $sql);
    }

    public function consultaRevenda($ano, $mes, $filial)
    {
        $sql = "SELECT EXTRACT(YEAR FROM A1.entregue_dt) AS ano,
                   A1.AVIADA_LJ as cdconre,
                   SUM(a3.valorvenda_desc) AS VALOR_REVENDA,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 1 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_janeiro,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 2 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_fevereiro,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 3 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_marco,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 4 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_abril,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 5 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_maio,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 6 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_junho,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 7 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_julho,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 8 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_agosto,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 9 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_setembro,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 10 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_outubro,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 11 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_novembro,
                   CAST(SUM(CASE WHEN EXTRACT(MONTH FROM A1.entregue_dt) = 12 THEN a3.valorvenda_desc ELSE 0 END) AS DECIMAL(10,2)) AS valor_recebido_dezembro
            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
            inner join medico md on (md.codigo = a1.codigo_medico)
            left join medico_cr cr on (cr.codigo = md.codigo_conselho_regional)
            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'
            AND A1.codigo_tipooperacao NOT IN (5, 159, 174, 184, 185, 186, 187, 188, 190, 216, 221, 234, 235, 236, 237, 242, 246, 261, 296, 297)
            AND A3.codigo_produto NOT IN ('3024873','3025044')
            AND eg.codigo_estoque_classificacao NOT IN (300002)";

        if ($ano && $ano != "Selecione") {
            // Convertendo os anos para inteiros e encontrando o menor ano
            $anoArray = array_map('intval', (array)$ano);
            $anoList = implode(',', $anoArray);
            $minAno = min($anoArray);

            // Adicionando o ano anterior ao menor ano
            $previousYear = $minAno - 1;
            if (!in_array($previousYear, $anoArray)) {
                $anoList .= ",$previousYear";
            }

            $sql .= " AND EXTRACT(YEAR FROM A1.entregue_dt) IN ($anoList)";
        }

        if ($mes && $mes != "Selecione") {
            $sql .= " AND EXTRACT(MONTH FROM A1.entregue_dt) = " . intval($mes);
        }

        // Verifica se $filial é um array antes de usar implode
        // Aplicação da condição no SQL, com verificação para a variável $filial
        if (!empty($filial) && $filial !== "Todos") {
            $filialList = (is_array($filial)) ? implode(",", $filial) : $filial; // Converte para string se for um array
            $sql .= " AND A1.AVIADA_LJ IN ($filialList)";
        }

        // Finaliza a query SQL
        $sql .= " AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
       AND A1.STATUS_MOV = '-1'
       AND A1.codigo_tipooperacao NOT IN (5, 159, 174, 184, 185, 186, 187, 188, 190, 216, 221, 234, 235, 236, 237, 242, 246, 261, 296, 297)
       GROUP BY ano, A1.AVIADA_LJ";

        // Debug: mostrar o SQL completo
        //echo $sql;

        return ibase_query($this->connection, $sql);
    }

    public function adicionarValores(&$totais, $row, $tipo)
    {
        $ano = $row['ANO'];

        // Inicializa o ano se não existir
        if (!isset($totais[$ano])) {
            $totais[$ano] = [
                'VALOR_MANIPULADO' => 0,
                'VALOR_MARCA_PROPRIA' => 0,
                'VALOR_REVENDA' => 0,
                'VALOR_TOTAL' => 0,
                'VALOR_RECEBIDO_JANEIRO' => 0,
                'VALOR_RECEBIDO_FEVEREIRO' => 0,
                'VALOR_RECEBIDO_MARCO' => 0,
                'VALOR_RECEBIDO_ABRIL' => 0,
                'VALOR_RECEBIDO_MAIO' => 0,
                'VALOR_RECEBIDO_JUNHO' => 0,
                'VALOR_RECEBIDO_JULHO' => 0,
                'VALOR_RECEBIDO_AGOSTO' => 0,
                'VALOR_RECEBIDO_SETEMBRO' => 0,
                'VALOR_RECEBIDO_OUTUBRO' => 0,
                'VALOR_RECEBIDO_NOVEMBRO' => 0,
                'VALOR_RECEBIDO_DEZEMBRO' => 0,
            ];
        }

        // Adiciona os valores conforme o tipo
        if ($tipo === 'manipulado') {
            $totais[$ano]['VALOR_MANIPULADO'] += $row['VALOR_MANIPULADO'];
        } elseif ($tipo === 'marca') {
            $totais[$ano]['VALOR_MARCA_PROPRIA'] += $row['VALOR_MARCA_PROPRIA'];
        } elseif ($tipo === 'revenda') {
            $totais[$ano]['VALOR_REVENDA'] += $row['VALOR_REVENDA'];
        }

        // Soma os valores recebidos por mês ao total
        $meses = [
            'JANUARIO' => 'VALOR_RECEBIDO_JANEIRO',
            'FEVEREIRO' => 'VALOR_RECEBIDO_FEVEREIRO',
            'MARCO' => 'VALOR_RECEBIDO_MARCO',
            'ABRIL' => 'VALOR_RECEBIDO_ABRIL',
            'MAIO' => 'VALOR_RECEBIDO_MAIO',
            'JUNHO' => 'VALOR_RECEBIDO_JUNHO',
            'JULHO' => 'VALOR_RECEBIDO_JULHO',
            'AGOSTO' => 'VALOR_RECEBIDO_AGOSTO',
            'SETEMBRO' => 'VALOR_RECEBIDO_SETEMBRO',
            'OUTUBRO' => 'VALOR_RECEBIDO_OUTUBRO',
            'NOVEMBRO' => 'VALOR_RECEBIDO_NOVEMBRO',
            'DEZEMBRO' => 'VALOR_RECEBIDO_DEZEMBRO',
        ];

        foreach ($meses as $mes => $key) {
            if (isset($row[$key])) {
                $totais[$ano][$key] += $row[$key];
            }
        }

        // Atualiza o valor total consolidado
        $totais[$ano]['VALOR_TOTAL'] = $totais[$ano]['VALOR_MANIPULADO'] + $totais[$ano]['VALOR_MARCA_PROPRIA'] + $totais[$ano]['VALOR_REVENDA'];
    }
}
