<?php

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


class ConsultaDadosPerformance
{


    private $connection;

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

        $this->connection = $connection;
    }


    public function consultaMedico($ano, $filial = null, $visitador = null, $medico = null)
    {
        $temFiltroMedico = $medico && $medico != "Todos";
        $temFiltroVisitador = !empty($visitador) && !in_array("Todos", (array)$visitador);

        // Trata medico como array
        $medicoFiltro = [];
        if ($temFiltroMedico) {
            if (is_array($medico)) {
                $medicoFiltro = array_map(function ($m) {
                    return strtoupper(addslashes($m));
                }, $medico);
            } else {
                $medicoFiltro = [strtoupper(addslashes($medico))];
            }
        }

        $visitadorFiltro = $temFiltroVisitador ? $visitador : [];

        $sql = "
        SELECT
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 1, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_JANEIRO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 2, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_FEVEREIRO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 3, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_MARCO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 4, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_ABRIL,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 5, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_MAIO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 6, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_JUNHO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 7, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_JULHO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 8, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_AGOSTO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 9, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_SETEMBRO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 10, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_OUTUBRO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 11, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_NOVEMBRO,
            SUM(IIF(EXTRACT(MONTH FROM A1.ENTREGUE_DT) = 12, COALESCE(A1.VALORVENDA_DESC,0),0)) AS VALOR_RECEBIDO_DEZEMBRO
        ";

        if ($temFiltroMedico || $temFiltroVisitador) {
            $sql = str_replace("SELECT", "SELECT ME.NOMEMEDICO AS NOME_MEDICO, MIN(RP.CODIGO) AS COD_REPRESENTANTE,", $sql);
        }

        $sql .= "
        FROM ATENDIMENTO_A1 A1
        INNER JOIN MEDICO ME ON ME.CODIGO = A1.CODIGO_MEDICO
        LEFT JOIN MEDICO_CR CR ON ME.CODIGO_CONSELHO_REGIONAL = CR.CODIGO
        LEFT JOIN FUNCIONARIO FU ON FU.CODIGO = CASE WHEN A1.STATUS_MOV = 0 THEN A1.CADASTRO_LJ ELSE A1.AVIADA_CF END
        LEFT JOIN (
            SELECT MR.CODIGO_MEDICO, MIN(RP.CODIGO) AS CODIGO
            FROM MEDICO_REPRESENTANTE MR
            JOIN FUNCIONARIO RP ON MR.CODIGO_FUNCIONARIO = RP.CODIGO
            GROUP BY MR.CODIGO_MEDICO
        ) RP ON ME.CODIGO = RP.CODIGO_MEDICO
        WHERE A1.TIPO_ATENDIMENTO = 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 EXTRACT(YEAR FROM A1.ENTREGUE_DT) = $ano
        ";

        // filtro de filial
        if (!empty($filial) && $filial != "Todos") {
            if (strpos($filial, ',') !== false) {
                $sql .= " AND A1.AVIADA_LJ IN ($filial) ";
            } else {
                $sql .= " AND A1.AVIADA_LJ = '$filial' ";
            }
        }

        // ✅ FILTRO DE MÉDICO AGORA NO WHERE
        if ($temFiltroMedico && !empty($medicoFiltro)) {
            $medicosStr = "'" . implode("','", $medicoFiltro) . "'";
            $sql .= " AND (CR.SIGLA || '-' || ME.CR_ESTADO || '-' || ME.CRM) IN ($medicosStr) ";
        }

        // agrupamento
        if ($temFiltroMedico || $temFiltroVisitador) {
            $sql .= " GROUP BY ME.NOMEMEDICO ";

            $having = [];

            if ($temFiltroVisitador) {
                $visitadoresStr = "'" . implode("','", $visitadorFiltro) . "'";
                $having[] = "MIN(RP.CODIGO) IN ($visitadoresStr)";
            }

            if ($having) {
                $sql .= " HAVING " . implode(" AND ", $having);
            }
        }

        $stmt = ibase_prepare($this->connection, $sql);
        if ($stmt === false) {
            die('Erro na preparação da consulta: ' . ibase_errmsg());
        }

        $result = ibase_execute($stmt);

        $totais = [];
        while ($row = ibase_fetch_assoc($result)) {
            $totais[] = $row;
        }

        return $totais;
    }
}

// Função para adicionar valores ao array de totais
function adicionarValores(&$totais, $row)
{
    $ano = date('Y'); // ou passe o ano como parâmetro

    if (!isset($totais[$ano])) {
        $totais[$ano] = [];
        foreach ($row as $chave => $valor) {
            $totais[$ano][strtoupper($chave)] = $valor ?? 0;
        }
    } else {
        foreach ($row as $chave => $valor) {
            $totais[$ano][strtoupper($chave)] += $valor ?? 0;
        }
    }
}
