<?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 getDetalhesManipulado($datainicio, $datafinal, $filial, $vendedor = null)
    {
        if (!is_array($filial)) {
            $filial = explode(',', $filial);
        }

        $filial = array_filter($filial, function ($f) {
            return is_numeric($f);
        });

        if (count($filial) === 0) {
            $filial = [0];
        }

        $placeholders = implode(',', array_fill(0, count($filial), '?'));

        // Ajusta datas para formato Y-m-d (Firebird espera isso)
        $datainicio = date('Y-m-d', strtotime($datainicio));
        $datafinal = date('Y-m-d', strtotime($datafinal));

        $sql = "select
        iif(A1.STATUS_MOV = 0,A1.CADASTRO_CF,A1.AVIADA_CF) as CDFUN,
        A1.codigo_empresa_padrao AS cdcon,
        A1.codigo AS NRCPM,
        FU.NOMEFUNCIONARIO as NOMEFUN,
        cast(coalesce(sum(A2.VALORFORMULA_VENDA_DESC),0) as numeric (18,2)) as VALOR_MANIPULADO
        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 ? AND ?
        and A1.CODIGO_EMPRESA_PADRAO IN ($placeholders)
        ";


        $params = array_merge([$datainicio, $datafinal], array_map('intval', $filial));

        // Filtro de vendedor (por nome)
        if (!empty($vendedor) && $vendedor !== 'NULL') {
            $sql .= " AND iif(A1.STATUS_MOV = 0,A1.CADASTRO_CF,A1.AVIADA_CF)  IN ($vendedor)";
        }

        $sql .= "GROUP BY  CDFUN, CDCON,NRCPM,NOMEFUN";


        $stmt = ibase_prepare($this->connection, $sql);
        $queryResult = ibase_execute($stmt, ...$params);

        if (!$queryResult) {
            die('Erro na consulta: ' . ibase_errmsg());
        }

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

        return $result;
    }

    public function getDetalhesRevenda($datainicio, $datafinal, $filial, $vendedor = null)
    {
        if (!is_array($filial)) {
            $filial = explode(',', $filial);
        }

        $filial = array_filter($filial, function ($f) {
            return is_numeric($f);
        });

        if (count($filial) === 0) {
            $filial = [0];
        }

        $placeholders = implode(',', array_fill(0, count($filial), '?'));

        $datainicio = date('Y-m-d', strtotime($datainicio));
        $datafinal = date('Y-m-d', strtotime($datafinal));

        $sql = "SELECT 
            IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF) as CDFUN,
            A1.AVIADA_LJ AS CDCON,
            A1.codigo as NRCPM,
            FU.NOMEFUNCIONARIO as NOMEFUN, 
            cast(sum(a3.valorvenda_desc) as numeric (18,2)) AS VALOR_REVENDA
        
        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 ? AND ?
        AND A1.aviada_lj IN ($placeholders)
        ";

        $params = array_merge([$datainicio, $datafinal], array_map('intval', $filial));

        // Filtro de vendedor (por nome)
        if (!empty($vendedor) && $vendedor !== 'NULL') {
            $sql .= " AND A1.CODIGO_FUNCIONARIO_COMISSAO IN ($vendedor)";
        }

        $sql .= " GROUP BY CDFUN ,CDCON , NRCPM, NOMEFUN";


        $stmt = ibase_prepare($this->connection, $sql);
        $queryResult = ibase_execute($stmt, ...$params);

        if (!$queryResult) {
            die('Erro na consulta: ' . ibase_errmsg());
        }

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

        return $result;
    }

    public function getDetalhesMarca($datainicio, $datafinal, $filial, $vendedor = null)
    {
        if (!is_array($filial)) {
            $filial = explode(',', $filial);
        }

        $filial = array_filter($filial, function ($f) {
            return is_numeric($f);
        });

        if (count($filial) === 0) {
            $filial = [0];
        }

        $placeholders = implode(',', array_fill(0, count($filial), '?'));

        $datainicio = date('Y-m-d', strtotime($datainicio));
        $datafinal = date('Y-m-d', strtotime($datafinal));

        $sql = "SELECT 
            IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF) as CDFUN,
            A1.AVIADA_LJ AS CDCON,
            A1.codigo as NRCPM,
            FU.NOMEFUNCIONARIO as NOMEFUN, 
            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 ? AND ?
        AND A1.aviada_lj IN ($placeholders)
        ";


        $params = array_merge([$datainicio, $datafinal], array_map('intval', $filial));

        if (!empty($vendedor) && $vendedor !== 'NULL') {
            $sql .= " AND  A1.CODIGO_FUNCIONARIO_COMISSAO  IN ($vendedor)";
        }

        $sql .= " GROUP BY CDFUN ,CDCON , NRCPM, NOMEFUN";

        $stmt = ibase_prepare($this->connection, $sql);
        $queryResult = ibase_execute($stmt, ...$params);

        if (!$queryResult) {
            die('Erro na consulta: ' . ibase_errmsg());
        }

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

        return $result;
    }
}
