<?php

if (file_exists('../conexao/conexao.php')) {
    include('../conexao/conexao.php');
}

class Vendedores
{
    private $connection;

    // Construtor para receber a conexão como dependência
    public function __construct($connection)
    {
        $this->connection = $connection;
    }

    /**
     * Função para listar vendedores com base no código da filial e opcionalmente pelo ID do vendedor
     *
     * @param string $cdcon Código da filial selecionada
     * @param string|null $idVendedor ID do vendedor (opcional)
     * @return array Lista de vendedores
     */
    public function listarVendedores($cdcon = '', $idVendedor = '')
    {

        // Consulta SQL base com o filtro pelo código da filial e opcionalmente pelo ID do vendedor
        $query = " SELECT
              FU.CODIGO AS COD_VENDEDOR,
              FU.NOMEFUNCIONARIO AS NOME_VENDEDOR,
              FU.CODIGO_EMPRESA AS COD_FILIAL,
              FF.NOMEFUNCAO AS NOME_FUNCAO,
              FD.NOMEDEPTO AS NOME_DEPTO,
              FU.DATAADMISSAO AS DATA_ADMISSAO
          FROM FUNCIONARIO FU
              INNER JOIN FUNCIONARIO_FUNCAO FF ON FU.CODIGO_FUNCIONARIO_FUNCAO = FF.CODIGO
          INNER JOIN FUNCIONARIO_DEPTO FD ON FU.CODIGO_FUNCIONARIO_DEPTO = FD.CODIGO
          WHERE FU.CODIGO <> 0";

        // Array de parâmetros
        $params = [];

        // Adiciona a cláusula de filtro por filial, se fornecido
        if ($cdcon) {
            $query .= " AND FU.CODIGO_EMPRESA = ?";
            $params[] = $cdcon; // Adiciona o parâmetro da filial ao array
        }

        // Adiciona a cláusula de filtro por ID do vendedor, se fornecido
        if ($idVendedor) {
            $query .= " AND FU.CODIGO = ?";
            $params[] = $idVendedor; // Adiciona o parâmetro do vendedor ao array
        }

        // Aqui adicionamos o GROUP BY para garantir que os dados sejam agrupados corretamente
        $query .= " GROUP BY
              FU.CODIGO,
              FU.NOMEFUNCIONARIO,
              FU.CODIGO_EMPRESA,
              FF.NOMEFUNCAO,
              FD.NOMEDEPTO,
              FU.DATAADMISSAO
        ORDER BY FU.NOMEFUNCIONARIO";

        // Prepara a query com ibase
        $stmt = ibase_prepare($this->connection, $query);

        // Verifica se a consulta foi preparada corretamente
        if (!$stmt) {
            die('Erro ao preparar a consulta: ' . ibase_errmsg());
        }

        // Executa a query com o número correto de parâmetros
        $result = ibase_execute($stmt, ...$params);

        // Verifica se a execução foi bem-sucedida
        if (!$result) {
            die('Erro ao executar a consulta: ' . ibase_errmsg());
        }

        // Array para armazenar os vendedores
        $vendedores = [];

        // Loop para buscar cada resultado
        while ($row = ibase_fetch_assoc($result)) {
            // Verifique os valores retornados em $row para garantir que estão corretos
            $vendedores[] = $row;
        }

        return $vendedores;
    }
}
