<?php
require '../../conexao/conexao.php';

class Vendedores
{

    private $connectionmysql;
    private $connection;

    public function __construct()
    {
        global $connectionmysql;
        global $connection;
        $this->connectionmysql = $connectionmysql;
        $this->connection = $connection;
    }


    public function VendedoresTotal($dataInicial, $dataFinal, $tipo, $filial, $vendedor = null)
    {
        $vendedor = $vendedor ? implode(',', array_map(function ($item) {
            return "'" . addslashes(trim($item)) . "'";
        }, explode(',', $vendedor))) : 'NULL';

        $manipulado = "select
        FU.NOMEFUNCIONARIO as NOMEFUN,
        iif(A1.STATUS_MOV = 0,A1.CADASTRO_CF,A1.AVIADA_CF) as CDFUNRE,
        A1.codigo_empresa_padrao AS FILIAL,
        cast(coalesce(sum(A2.VALORFORMULA_VENDA_DESC),0) as numeric (18,2)) as VALOR_MANIPULADO,
        0 AS VALOR_REVENDA,
        0 AS VALOR_MARCA_PROPRIA
        from ATENDIMENTO_A2 A2
        inner join ATENDIMENTO_A1 A1 on A2.CODIGO_ATEND_A1 = A1.CODIGO
        inner join FORMAFARMACEUTICA FF on A2.CODIGO_FORMAFARMACEUTICA = FF.CODIGO
        inner join FUNCIONARIO FU on FU.CODIGO = iif(A1.STATUS_MOV = 0,
        A1.CADASTRO_CF,
        A1.AVIADA_CF)
        inner join EMPRESA EMP on EMP.CODIGO = iif(A1.STATUS_MOV = 0,
        A1.CADASTRO_LJ,
        A1.AVIADA_LJ)
        where A1.TIPO_ATENDIMENTO = 1
        AND A1.status_mov = '-1'
        AND A2.concluidoformula = '-1'
        AND A1.CANCELAMENTO_CF IS NULL
        AND A1.DESCARTE_CF IS NULL 
        AND CAST(A1.entregue_dt AS DATE) BETWEEN '$dataInicial' AND '$dataFinal'
        GROUP BY NOMEFUN, CDFUNRE,FILIAL";

        $revenda = "   SELECT 
        FU.NOMEFUNCIONARIO as NOMEFUN,
        IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF) as CDFUNRE,
        A1.AVIADA_LJ AS FILIAL,
        0 AS VALOR_MANIPULADO,
        cast(sum(a3.valorvenda_desc) as numeric (18,2)) AS VALOR_REVENDA,
        0 AS VALOR_MARCA_PROPRIA 
        from atendimento_a3 a3
        inner join atendimento_a1 a1 on a3.codigo_atend_a1 = a1.codigo
        LEFT JOIN UTIL_REL_AG1 (1) AG ON AG.AG1_OP > 0
        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)
        INNER JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF)
        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 A3.codigo_produto NOT IN ('3024873','3025044')
        AND eg.codigo_estoque_classificacao NOT IN (300002)
        AND CAST(A1.entregue_dt AS DATE) BETWEEN '$dataInicial' AND '$dataFinal'
        GROUP BY NOMEFUN ,CDFUNRE,FILIAL";

        $marcaPropria = "SELECT
        FU.NOMEFUNCIONARIO as NOMEFUN,
        IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF) as CDFUNRE,
        A1.AVIADA_LJ AS FILIAL,
        0 AS VALOR_MANIPULADO,
        0 AS VALOR_REVENDA,
        cast(sum(a3.valorvenda_desc) as numeric (18,2)) AS VALOR_MARCA_PROPRIA
        from atendimento_a3 a3
        inner join atendimento_a1 a1 on a3.codigo_atend_a1 = a1.codigo
        LEFT JOIN UTIL_REL_AG1 (1) AG ON AG.AG1_OP > 0
        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)
        INNER JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF)
        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 (
        A3.codigo_produto IN ('3024873', '3025044') 
        OR EG.codigo_estoque_classificacao IN (300002) 
        )
            AND CAST(A1.entregue_dt AS DATE) BETWEEN '$dataInicial' AND '$dataFinal'
            GROUP BY NOMEFUN ,CDFUNRE,FILIAL";

            // Query consolidada
            $sql_consolidado = "
        SELECT 
            NOMEFUN,
            CDFUNRE,
            FILIAL,
            SUM(VALOR_MANIPULADO) AS VALOR_MANIPULADO,
            SUM(VALOR_REVENDA) AS VALOR_REVENDA,
            SUM(VALOR_MARCA_PROPRIA) AS VALOR_MARCA_PROPRIA
        FROM (
        ";

        switch (strtolower(trim($tipo))) {
            case 'manipulado':
                $sql_consolidado .= $manipulado;
                break;
            case 'revenda':
                $sql_consolidado .= $revenda;
                break;
            case 'marca propria':
            case 'marca própria':
                $sql_consolidado .= $marcaPropria;
                break;
            default:
                $sql_consolidado .= "$manipulado UNION ALL $revenda UNION ALL $marcaPropria";
                break;
        }

        $sql_consolidado .= "
            ) base
            WHERE 1=1
            AND base.FILIAL IS NOT NULL AND base.FILIAL <> 0
            ";

        // Filtro de filial
        if (!empty($filial) && $filial !== "Todos") {
            // Garante que é array
            if (!is_array($filial)) {
                $filial = explode(',', $filial); // Suporta entrada como "2,4,6"
            }

            // Filtra apenas números válidos
            $filial_filtered = array_filter($filial, function ($val) {
                return is_numeric($val) && intval($val) > 0;
            });

            if (count($filial_filtered) > 0) {
                $filial_str = implode(',', array_map('intval', $filial_filtered));
                $sql_consolidado .= " AND base.FILIAL IN ($filial_str)";
            }
        }


        // Filtro de vendedor (por nome)
        if (!empty($vendedor) && $vendedor !== 'NULL') {
            $sql_consolidado .= " AND base.CDFUNRE IN ($vendedor)";
        }

        $sql_consolidado .= "
        GROUP BY base.NOMEFUN, base.CDFUNRE, base.FILIAL
        ORDER BY base.FILIAL, base.NOMEFUN
        ";

        try {
            $result = ibase_query($this->connection, $sql_consolidado);
            if (!$result) {
                return false;
            }
            return $result;
        } catch (Exception $e) {
            return false;
        }
    }
}
