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

class ConsultaDescontos
{

    private $connectionmysql;
    private $connection;

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


    public function get_descontos_index_manpilado($filial = null, $DataInicial = null, $DataFinal = null, $tipo = null)
    {
        $query_descontos = " 
        SELECT
        A1.AVIADA_LJ AS CODLJ,
        A1.CODIGO_CLIENTE,
        C.nomecliente as NOME_CLIENTE,
        FU.codigo || ' - ' || FU.nomefuncionario AS VENDEDOR,
        A1.codigo as requisicao,

        SUM(A1.VALORVENDA) AS valor_bruto_manipulado, 
        SUM(A1.VALORVENDA_DESC) AS valor_liquido_manipulado
            FROM ATENDIMENTO_A1 A1
         LEFT JOIN UTIL_REL_AG1(1) AG ON AG.AG1_OP > 0
         INNER JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF)
          INNER JOIN CLIENTE C ON  A1.CODIGO_CLIENTE = C.CODIGO

         WHERE A1.TIPO_ATENDIMENTO IN ($tipo)
         AND CAST(A1.entregue_dt AS DATE) BETWEEN '$DataInicial' AND '$DataFinal'
         AND A1.AVIADA_LJ IN ($filial)
         AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
         AND A1.STATUS_MOV = '-1'
         AND A1.CANCELAMENTO_LJ IS NULL
         AND A1.codigo_tipooperacao NOT IN (190,246,174,188,5,261,255,186,159,235,185,234,184,216,236,187,296,297,221,237,242,209)
         GROUP BY AVIADA_LJ,A1.CODIGO_CLIENTE,A1.codigo,
         FU.codigo, FU.nomefuncionario,C.nomecliente
         ORDER BY AVIADA_LJ";



        $result_descontos = ibase_query($this->connection, $query_descontos);

        $descontos = [];
        if ($result_descontos) {
            while ($row = ibase_fetch_assoc($result_descontos)) {
                $descontos[] = $row;
            }
        } else {
            die('Erro na consulta: ' . ibase_errmsg());
        }

        return $descontos;
    }
    public function get_descontos_index_varejo($filial = null, $DataInicial = null, $DataFinal = null, $tipo = null)
    {
        $query_descontos = "SELECT
        A1.AVIADA_LJ AS CODLJ,
        A1.CODIGO_CLIENTE,
        C.nomecliente as NOME_CLIENTE,
        A1.codigo as cupom,
        FU.codigo || ' - ' || FU.nomefuncionario AS VENDEDOR,
        SUM(A1.VALORVENDA) AS valor_bruto_varejo,
        SUM(A1.VALORVENDA_DESC) AS valor_liquido_varejo,
        A1.AVIADA_LJ as FILIAL
        FROM ATENDIMENTO_A1 A1
        LEFT JOIN UTIL_REL_AG1(1) AG ON AG.AG1_OP > 0
        INNER JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF)
        INNER JOIN CLIENTE C ON  A1.CODIGO_CLIENTE = C.CODIGO
         WHERE A1.TIPO_ATENDIMENTO IN ($tipo)
        AND  CAST(A1.entregue_dt as date) between '$DataInicial' and '$DataFinal'
        AND A1.AVIADA_LJ IN ($filial)
        AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
        AND A1.STATUS_MOV = '-1'
        AND A1.CANCELAMENTO_LJ IS NULL
        AND A1.codigo_tipooperacao NOT IN (190,246,174,188,5,261,255,186,159,235,185,234,184,216,236,187,296,297,221,237,242,209)
        Group by AVIADA_LJ,A1.AVIADA_LJ ,A1.CODIGO_CLIENTE ,A1.codigo, C.nomecliente ,FU.codigo, FU.nomefuncionario
        order by AVIADA_LJ";

        $result_descontos = ibase_query($this->connection, $query_descontos);

        $descontos = [];
        if ($result_descontos) {
            while ($row = ibase_fetch_assoc($result_descontos)) {
                $descontos[] = $row;
            }
        } else {
            die('Erro na consulta: ' . ibase_errmsg());
        }

        return $descontos;
    }


    //////QUERRY DETALHES
    public function get_desconto_manipulado($filial = null, $DataInicial = null, $DataFinal = null, $requi)
    {
        $query_descontos = "SELECT A3.codigo_atend_a1, A3.numeroformula,A3.codigo_produto,
        EG.nomeproduto, A3.lote_la,A3.quantidade, A3.unidade , A3.quantidade_calculo , A3.valorvenda,A1.cadastro_lj

        FROM ATENDIMENTO_A3 A3
        INNER JOIN atendimento_a1 A1 ON A1.codigo = A3.codigo_atend_a1
        INNER join ESTOQUE_GERAL EG ON A3.codigo_produto = EG.codigo
        WHERE  A3.codigo_atend_a1 = $requi
        AND A1.cadastro_lj IN ($filial) 
        AND CAST(A1.entregue_dt AS DATE) BETWEEN '$DataInicial' AND '$DataFinal'
        AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
        AND A1.STATUS_MOV = '-1'
        AND A1.CANCELAMENTO_LJ IS NULL
        AND A1.codigo_tipooperacao NOT IN (190,246,174,188,5,261,255,186,159,235,185,234,184,216,236,187,296,297,221,237,242,209)
        AND  A1.CANCELAMENTO_LJ IS NULL
        ORDER BY A3.numeroformula, A3.numerolinha";



        $result_descontos = ibase_query($this->connection, $query_descontos);

        $descontos = [];
        if ($result_descontos) {
            while ($row = ibase_fetch_assoc($result_descontos)) {
                $descontos[] = $row;
            }
        } else {
            die('Erro na consulta: ' . ibase_errmsg());
        }

        return $descontos;
    }

    public function get_desconto_varejo($filial = null, $DataInicial = null, $DataFinal = null, $cupom)
    {
        $query_descontos = "SELECT
        A1.AVIADA_LJ AS CODLJ,
        A1.CODIGO_CLIENTE,
        C.nomecliente as NOME_CLIENTE,
        A1.codigo as cupom,
        FU.codigo || ' - ' || FU.nomefuncionario AS VENDEDOR,
        SUM(A1.VALORVENDA) AS valor_bruto_varejo,
        SUM(A1.VALORVENDA_DESC) AS valor_liquido_varejo,
        A1.AVIADA_LJ as FILIAL
        FROM ATENDIMENTO_A1 A1
        LEFT JOIN UTIL_REL_AG1(1) AG ON AG.AG1_OP > 0
        INNER JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF)
        INNER JOIN CLIENTE C ON  A1.CODIGO_CLIENTE = C.CODIGO
         WHERE A1.TIPO_ATENDIMENTO IN ($filial)
        AND  CAST(A1.entregue_dt as date) between '$DataInicial' and '$DataFinal'
        AND A1.AVIADA_LJ IN ($filial)
        AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
        AND A1.STATUS_MOV = '-1'
        AND A1.codigo = '$cupom'
        AND A1.CANCELAMENTO_LJ IS NULL
        AND A1.codigo_tipooperacao NOT IN (190,246,174,188,5,261,255,186,159,235,185,234,184,216,236,187,296,297,221,237,242,209)
        Group by AVIADA_LJ,A1.AVIADA_LJ ,A1.CODIGO_CLIENTE ,A1.codigo, C.nomecliente ,FU.codigo, FU.nomefuncionario
        order by AVIADA_LJ";

        $result_descontos = ibase_query($this->connection, $query_descontos);

        $descontos = [];
        if ($result_descontos) {
            while ($row = ibase_fetch_assoc($result_descontos)) {
                $descontos[] = $row;
            }
        } else {
            die('Erro na consulta: ' . ibase_errmsg());
        }

        return $descontos;
    }



    //////QUERRY OLDS
    public function get_descontos_manipulado($id_desconto = null, $filial = null, $DataInicial = null, $DataFinal = null)
    {
        // Monta os filtros
        $filtros = [];
        $filtros[] = "CAST(A1.entregue_dt AS DATE) BETWEEN '$DataInicial' AND '$DataFinal'";
        $filtros[] = "A1.AVIADA_LJ IN ($filial)";
        $filtros[] = "A1.TIPO_ATENDIMENTO IN ($filial)";
        $filtros[] = "A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'";
        $filtros[] = "A1.STATUS_MOV = '-1'";
        $filtros[] = "A1.CANCELAMENTO_LJ IS NULL";
        $filtros[] = "A1.codigo_tipooperacao NOT IN (190,246,174,188,5,261,255,186,159,235,185,234,184,216,236,187,296,297,221,237,242,209)";

        // Filtro adicional: por cliente ou requisição
        if (!empty($id_desconto)) {
            if (preg_match('/[^0-9]/', $id_desconto)) {
                // Se contiver letras, assume que é número da requisição
                $filtros[] = "A1.codigo = '" . addslashes($id_desconto) . "'";
            } else {
                // Se for só número, pode ser cliente ou requisição
                $id = intval($id_desconto);
                $filtros[] = "(A1.CODIGO_CLIENTE = $id OR A1.codigo = '$id')";
            }
        }

        // Monta o WHERE
        $where = implode(" AND ", $filtros);

        // Query final
        $query_detalhe_requi = "
        SELECT
            A1.AVIADA_LJ AS CODLJ,
            A1.CODIGO_CLIENTE,
            C.nomecliente as NOME_CLIENTE,
            FU.codigo || ' - ' || FU.nomefuncionario AS VENDEDOR,
            A1.codigo as requisicao,
            SUM(A1.VALORVENDA) AS valor_bruto_manipulado, 
            SUM(A1.VALORVENDA_DESC) AS valor_liquido_manipulado
        FROM ATENDIMENTO_A1 A1
        LEFT JOIN UTIL_REL_AG1(1) AG ON AG.AG1_OP > 0
        INNER JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF)
        INNER JOIN CLIENTE C ON A1.CODIGO_CLIENTE = C.CODIGO
        WHERE $where
        GROUP BY A1.AVIADA_LJ, A1.CODIGO_CLIENTE, A1.codigo, FU.codigo, FU.nomefuncionario, C.nomecliente
        ORDER BY A1.AVIADA_LJ
     ";

        // Executa
        $result_descontos = ibase_query($this->connection, $query_detalhe_requi);

        $descontos = [];
        if ($result_descontos) {
            while ($row = ibase_fetch_assoc($result_descontos)) {
                $descontos[] = $row;
            }
        } else {
            die('Erro na consulta: ' . ibase_errmsg());
        }

        return $descontos;
    }

    public function get_descontos_varejo($id_desconto = null, $filial = null, $DataInicial = null, $DataFinal = null)
    {
        // Filtros dinâmicos para o WHERE
        $filtros = [];
        $filtros[] = "CAST(A1.entregue_dt AS DATE) BETWEEN '$DataInicial' AND '$DataFinal'";
        $filtros[] = "A1.AVIADA_LJ IN ($filial)";
        $filtros[] = "A1.TIPO_ATENDIMENTO IN ($filial)";
        $filtros[] = "A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'";
        $filtros[] = "A1.STATUS_MOV = '-1'";
        $filtros[] = "A1.CANCELAMENTO_LJ IS NULL";
        $filtros[] = "A1.codigo_tipooperacao NOT IN (190,246,174,188,5,261,255,186,159,235,185,234,184,216,236,187,296,297,221,237,242,209)";

        if (!empty($id_desconto)) {
            $filtros[] = "A1.CODIGO_CLIENTE = " . intval($id_desconto);
        }

        $where = implode(" AND ", $filtros);

        $query_detalhe_varejo = "
        SELECT
            A1.AVIADA_LJ AS CODLJ,
            A1.CODIGO_CLIENTE,
            C.nomecliente AS NOME_CLIENTE,
            A1.codigo AS cupom,
            FU.codigo || ' - ' || FU.nomefuncionario AS VENDEDOR,
            SUM(A1.VALORVENDA) AS valor_bruto_varejo,
            SUM(A1.VALORVENDA_DESC) AS valor_liquido_varejo,
            A1.AVIADA_LJ AS FILIAL
        FROM ATENDIMENTO_A1 A1
        LEFT JOIN UTIL_REL_AG1(1) AG ON AG.AG1_OP > 0
        INNER JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF)
        INNER JOIN CLIENTE C ON A1.CODIGO_CLIENTE = C.CODIGO
        WHERE $where
        GROUP BY A1.AVIADA_LJ, A1.CODIGO_CLIENTE, A1.codigo, C.nomecliente, FU.codigo, FU.nomefuncionario
        ORDER BY A1.AVIADA_LJ
       ";

        $result_descontos = ibase_query($this->connection, $query_detalhe_varejo);

        $descontos = [];
        if ($result_descontos) {
            while ($row = ibase_fetch_assoc($result_descontos)) {
                $descontos[] = $row;
            }
        } else {
            die('Erro na consulta: ' . ibase_errmsg());
        }

        return $descontos;
    }

    public function get_percentual_desconto()
    {
        $sql = "
            SELECT 
                CASE WHEN valor1 = 0 THEN NULL ELSE valor1 END AS valor1,
                CASE WHEN valor2 = 0 THEN NULL ELSE valor2 END AS valor2
            FROM configuracoes
            WHERE tipo_meta = 'Percentual desconto';
        ";

        $resultmeta = $this->connectionmysql->query($sql);

        $existentes = [];

        if ($resultmeta && $resultmeta->num_rows > 0) {
            while ($row = $resultmeta->fetch_assoc()) {
                $existentes[] = $row;
            }
        }
        return $existentes;
    }
}
