<?php
$path = '';
if (file_exists(__DIR__ . '../../conexao/conexao.php')) {
    $path = __DIR__ . '../../conexao/conexao.php';
} elseif (file_exists(__DIR__ . '../conexao/conexao.php')) {
    $path = __DIR__ . '../conexao/conexao.php';
}
if ($path) {
    require_once $path;
} else {
    die("Arquivo de conexão não encontrado.");
}


class ConsultaBancoDeDados
{
    private $connectionmysql;
    private $connection;

    public function __construct()
    {
        global $connectionmysql, $connection; // Acesso às conexões globais
        $this->connectionmysql = $connectionmysql;
        $this->connection = $connection;
    }

    public function get_filiais()
    {
        // Constrói a consulta base
        $query_filial = "SELECT codigo_fc AS ID, id AS ID_INTERNO, nome_filial AS NOME, id_cidade AS ID_REFERENCIA , situacao FROM filiais WHERE 1=1 AND situacao = 'S'";

        $params = [];
        $types = '';

        if (
            !empty($_SESSION['Cidade']) && $_SESSION['Cidade'] !== 'Todos'
        ) {
            $query_filial .= " AND id_cidade = ?";
            $params[] = $_SESSION['Cidade'];
            $types .= 'i'; // Adiciona 'i' para integer
        }

        if (!empty($_SESSION['CodigoFilial']) && $_SESSION['CodigoFilial'] !== 'Todos') {
            $query_filial .= " AND codigo_fc = ?";
            $params[] = $_SESSION['CodigoFilial'];
            $types .= 'i'; // Adiciona 'i' para integer
        }

        // Prepara a consulta
        $stmt = mysqli_prepare($this->connectionmysql, $query_filial);

        if (!$stmt) {
            die('Erro ao preparar a consulta: ' . mysqli_error($this->connectionmysql));
        }

        // Verifica se há parâmetros a serem vinculados
        if (!empty($params)) {
            mysqli_stmt_bind_param($stmt, $types, ...$params); // Liga os parâmetros dinamicamente
        }

        // Executa a consulta
        if (!mysqli_stmt_execute($stmt)) {
            die('Erro na consulta: ' . mysqli_error($this->connectionmysql));
        }

        // Obtém o resultado
        $result = mysqli_stmt_get_result($stmt);

        // Cria um array para armazenar os resultados
        $filiais = [];
        while ($row = mysqli_fetch_assoc($result)) {
            $filiais[] = $row;
        }

        // Libera os recursos
        mysqli_stmt_close($stmt);

        return $filiais; // Retorna o array de filiais
    }

    // Retorna todas as filiais ativas (ignorando filtros de sessão)
    public function get_all_filiais()
    {
        $query_filial = "SELECT id AS ID, codigo_fc AS CODIGO_FC, nome_filial AS NOME, id_cidade AS ID_REFERENCIA , situacao FROM filiais WHERE situacao = 'S'";

        $result = $this->connectionmysql->query($query_filial);
        if (!$result) {
            die('Erro na consulta: ' . $this->connectionmysql->error);
        }

        $filiais = [];
        while ($row = $result->fetch_assoc()) {
            $filiais[] = $row;
        }

        return $filiais;
    }



    public function get_cidades()
    {
        // Construir a consulta base
        $query_cidade_filial = "SELECT distinct c.id_cidade, c.nome_cidade FROM cidade c inner join filiais f on c.id_cidade = f.id_cidade";

        // Verifica se foi passado um filtro para cidade que não seja 'Todos'
        if (!empty($_SESSION['Cidade']) && $_SESSION['Cidade'] !== 'Todos') {
            $query_cidade_filial .= " WHERE c.id_cidade = ?";
        }

        // Prepara a consulta
        $stmt = mysqli_prepare($this->connectionmysql, $query_cidade_filial);

        if (!$stmt) {
            die('Erro ao preparar a consulta: ' . mysqli_error($this->connectionmysql));
        }

        // Liga o parâmetro de cidade se houver
        if (!empty($_SESSION['Cidade']) && $_SESSION['Cidade'] !== 'Todos') {
            mysqli_stmt_bind_param($stmt, 'i', $_SESSION['Cidade']);
        }

        // Executa a consulta
        if (!mysqli_stmt_execute($stmt)) {
            die('Erro na execução da consulta: ' . mysqli_error($this->connectionmysql));
        }

        // Obtém o resultado
        $result = mysqli_stmt_get_result($stmt);

        // Cria um array para armazenar os resultados
        $cidadefiliais = [];
        while ($row = mysqli_fetch_assoc($result)) {
            $cidadefiliais[] = $row;
        }

        // Libera os recursos
        mysqli_stmt_close($stmt);

        return $cidadefiliais; // Retorna o array de cidades
    }

    public function get_etapaFirebird()
    {
        $sql_etapa = "SELECT FFP.codigo as codigo_etapa,FFP.tipo_movimento,FFP.nometipo as nome_etapa,
            FFP.ativo,
            FFP.sequencia,
            FFP.tipo_producao,
            FFP.tipo_inclusao
            FROM  FORMAFARMACEUTICA_PROCESSO_TIPO FFP
            WHERE FFP.tipo_movimento = '1'
            AND FFP.ativo = '-1'
            order by FFP.nometipo,FFP.sequencia";



        $result_etapa = ibase_query($this->connection, $sql_etapa);

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

        $result_final = [];
        while ($row = ibase_fetch_assoc($result_etapa)) {
            // Converter a descrição para UTF-8
           // $row['NOME_ETAPA'] = mb_convert_encoding($row['NOME_ETAPA'], 'UTF-8', 'ISO-8859-1');
            $result_final[] = $row;
        }

        return $result_final;
    }

    public function get_etapa()
    {
        $sql_etapa = "SELECT codigo_etapa, nome_etapa FROM etapas_pcp ORDER BY nome_etapa";

        $result_etapa = $this->connectionmysql->query($sql_etapa);

        if ($result_etapa) {
            $etapaArray = array();

            while ($row = $result_etapa->fetch_assoc()) {
                $etapaArray[] = $row;
            }

            return $etapaArray;
        } else {
            die('Erro na consulta MySQL ETAPA: ' . $this->connectionmysql->error);
        }
    }

    public function get_erros()
    {
        $sql_erros = "SELECT id_erro, nome_erro FROM mapa_erros";

        $result_erros = $this->connectionmysql->query($sql_erros);
        if (!$result_erros) {
            die('Erro na consulta MySQL: ' . $this->connectionmysql->error);
        }

        $erros = [];
        while ($row = $result_erros->fetch_assoc()) {
            $erros[] = $row;
        }

        return $erros;
    }

    public function get_departamentos()
    {
        $sql = "SELECT DPT.codigo as ID ,DPT.nomedepto as NOME  FROM funcionario_depto DPT";


        $result = ibase_query($this->connection, $sql);

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

        $result_final = [];
        while ($row = ibase_fetch_assoc($result)) {
            // Converter a descrição para UTF-8
            $row['NOME'] = mb_convert_encoding($row['NOME'], 'UTF-8', 'ISO-8859-1');
            $result_final[] = $row;
        }

        return $result_final;
    }
    public function get_funcionarios_mandareceita($id = null)
    {
        // Constrói a consulta base
        $sql = "SELECT cod_fcerta as ID , nome as NOME FROM funcionarios WHERE 1=1 AND situacao = 'A'";

        if ($id) {
            $sql .= " AND id_funcionario IN ($id)";
        }

        $stmt = mysqli_prepare($this->connectionmysql, $sql);

        if (!$stmt) {
            die('Erro ao preparar a consulta: ' . mysqli_error($this->connectionmysql));
        }
        // Executa a consulta
        if (!mysqli_stmt_execute($stmt)) {
            die('Erro na consulta: ' . mysqli_error($this->connectionmysql));
        }

        // Obtém o resultado
        $resultmeta = mysqli_stmt_get_result($stmt);

        // Cria um array para armazenar os resultados
        $result = [];
        while ($row = mysqli_fetch_assoc($resultmeta)) {
            $row['ID_REFERENCIA'] = 0;
            $result[] = $row;
        }
        // Libera os recursos
        mysqli_stmt_close($stmt);
        return $result;
    }
    public function get_representante($filiais = null)
    {
        // Verifica se $filiais está definido e não está vazio
        if (!isset($filiais) || empty($filiais)) {
            // Define uma condição inválida ou ignora o filtro
            $query_vendedor_filial = "  SELECT 
              FU.CODIGO AS ID,
              FU.NOMEFUNCIONARIO AS NOME,
              FU.CODIGO_EMPRESA AS COD_FILIAL,
              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
          GROUP BY
              FU.CODIGO,
              FU.NOMEFUNCIONARIO,
              FU.CODIGO_EMPRESA,
              FU.DATAADMISSAO
          ORDER BY FU.NOMEFUNCIONARIO
         ";
        } else {
            $filiaisArray = explode(',', $filiais);
            $filiais = implode(',', array_map(function ($item) {
                return "'" . trim($item) . "'";
            }, $filiaisArray));

            // Monta a consulta com o filtro
            $query_vendedor_filial = "  SELECT 
              FU.CODIGO AS ID,
              FU.NOMEFUNCIONARIO AS NOME,
              FU.CODIGO_EMPRESA AS COD_FILIAL,
              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
                    AND CODIGO_EMPRESA IN ($filiais)
          GROUP BY
              FU.CODIGO,
              FU.NOMEFUNCIONARIO,
              FU.CODIGO_EMPRESA,
              FU.DATAADMISSAO
          ORDER BY FU.NOMEFUNCIONARIO
          ";
        }

        $result_vendedor_filial = ibase_query($this->connection, $query_vendedor_filial);

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

        $vendedorlojas = [];

        while ($row = ibase_fetch_assoc($result_vendedor_filial)) {
            //$row['NOME'] = mb_convert_encoding($row['NOME'], 'UTF-8', 'ISO-8859-1');
            $vendedorlojas[] = $row;
        }

        // Retorna o array de vendedores
        return $vendedorlojas;
    }

    public function get_vendedores()
    {

        $query_vendedor_filial = "  SELECT 
              FU.CODIGO AS ID,
              FU.NOMEFUNCIONARIO AS NOME,
              FU.CODIGO_EMPRESA AS ID_REFERENCIA,
              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
          GROUP BY
              FU.CODIGO,
              FU.NOMEFUNCIONARIO,
              FU.CODIGO_EMPRESA,
              FU.DATAADMISSAO
          ORDER BY FU.NOMEFUNCIONARIO";

        $result_vendedor_filial = ibase_query($this->connection, $query_vendedor_filial);

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

        $vendedorlojas = [];

        while ($row = ibase_fetch_assoc($result_vendedor_filial)) {
            //$row['NOME'] = mb_convert_encoding($row['NOME'], 'UTF-8', 'ISO-8859-1');
            $vendedorlojas[] = $row;
        }

        // Retorna o array de vendedores
        return $vendedorlojas;
    }


    public function getCidadesFiliais()
    {
        $query_cidade_filial = " select
       DISTINCT
      EP.codigo_cidadeestado ,
      CE.NOMECIDADE as MUNIC
      from EMPRESA EP
      INNER JOIN CADASTRO_ENDERECO CA ON CA.codigo_cadastro = EP.codigo
      inner join CIDADEESTADO CE on CA.codigo_cidadeestado = CE.CODIGO
      where CA.tipo_cadastro = 5
      order by EP.CODIGO";

        $result_cidade_filial = ibase_query($this->connection, $query_cidade_filial);

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

        $cidadefiliais = [];
        while ($row = ibase_fetch_assoc($result_cidade_filial)) {
            $cidadefiliais[] = $row;
        }

        return $cidadefiliais;
    }
}
