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

class ConsultasClientesOrcamentos
{
    private $connectionmysql;
    private $connection;

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

    // public function get_top_clientes_aprovados($connection, $ano = null, $mes = null, $filial = null, $cliente = null, $operacoes = null)
    // {
    //     $sql = "
    //     SELECT 
    //         A1.CODIGO_CLIENTE AS cod_cliente,
    //         CL.NOMECLIENTE AS nome_cliente,
    //         COUNT(A1.CODIGO) AS qtd_receitas,
    //         CAST(SUM((SELECT CAST(SUM(A2.MULTIPLO) AS INTEGER) 
    //                   FROM ATENDIMENTO_A2 A2 
    //                   WHERE A1.CODIGO = A2.CODIGO_ATEND_A1 AND A2.CONCLUIDOFORMULA = -1)) AS INTEGER) AS qtd_formulas,
    //         CAST(SUM(COALESCE(A1.VALORVENDA_DESC, 0)) AS NUMERIC(18,2)) AS valor_total
    //     FROM 
    //         ATENDIMENTO_A1 A1
    //         INNER JOIN CLIENTE CL ON A1.CODIGO_CLIENTE = CL.CODIGO
    //         INNER JOIN MEDICO ME ON A1.CODIGO_MEDICO = ME.CODIGO
    //     WHERE 
    //         A1.TIPO_ATENDIMENTO = 1
    //         AND A1.status_mov = -1  ";

    //     if (!empty($operacoes) && strtoupper($operacoes) !== "NULL") {
    //         $sql .= " AND A1.codigo_tipooperacao NOT IN ($operacoes)";
    //     }

    //     if (!empty($filial) && strtoupper($filial) !== "TODOS") {
    //         $sql .= " AND A1.aviada_lj IN ($filial)";
    //     }

    //     if (!empty($ano) && strtoupper($ano) !== "TODOS") {
    //         $sql .= " AND EXTRACT(YEAR FROM A1.aviada_dt) = " . intval($ano);
    //     }

    //     if (!empty($mes) && strtoupper($mes) !== "TODOS") {
    //         $sql .= " AND EXTRACT(MONTH FROM A1.aviada_dt) = " . intval($mes);
    //     }

    //     if (!empty($cliente) && strtoupper($cliente) !== "TODOS") {
    //         $cliente = str_replace("'", "''", $cliente);
    //         $sql .= " AND CL.NOMECLIENTE LIKE '%$cliente%'";
    //     }

    //     $sql .= "
    //     GROUP BY
    //         A1.CODIGO_CLIENTE,
    //         CL.NOMECLIENTE
    //     ORDER BY
    //         valor_total DESC   ";

    //     $result = ibase_query($connection, $sql);

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

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

    //     return $dados;
    // }

    public function get_top_clientes_aprovados($connection,  $filial = null, $cliente = null, $DataInicial, $DataFinal, $operacoes = null)
    {
       $sql = "WITH A2_SUM AS (
    SELECT
        A2.CODIGO_ATEND_A1 AS A1_CODIGO,

        COUNT(A2.CODIGO_ATEND_A1) AS QTD_FORMULAS_TOTAL,

        SUM(
            CASE 
                WHEN A2.CONCLUIDOFORMULA = '-1'
                THEN 1
                ELSE 0
            END
        ) AS QTD_FORMULAS_APROVADAS

    FROM ATENDIMENTO_A2 A2
    GROUP BY A2.CODIGO_ATEND_A1
)

SELECT
    A1.CODIGO_CLIENTE AS cod_cliente,
    CL.NOMECLIENTE AS nome_cliente,

    SUM(
        CASE 
            WHEN A1.STATUS_MOV = -1
            THEN CAST(A1.VALORVENDA_DESC AS NUMERIC(18,2))
            ELSE 0
        END
    ) AS TOTAL_VENDA_APROVADO,

    SUM(
        CASE 
            WHEN A1.STATUS_MOV = -1
            THEN COALESCE(A2S.QTD_FORMULAS_APROVADAS,0)
            ELSE 0
        END
    ) AS quantidade_aprovado,

    CAST(
        SUM(CASE WHEN A1.STATUS_MOV = -1 THEN A1.VALORVENDA_DESC ELSE 0 END)
        /
        NULLIF(
            SUM(
                CASE 
                    WHEN A1.STATUS_MOV = -1
                    THEN COALESCE(A2S.QTD_FORMULAS_APROVADAS,0)
                    ELSE 0
                END
            ),0
        )
    AS NUMERIC(18,2)
    ) AS TICKET_MEDIO_POR_FORMULA_APROVADO,

    ROUND(
        100 *
        SUM(CASE WHEN A1.STATUS_MOV = -1 THEN A1.VALORVENDA_DESC ELSE 0 END)
        /
        NULLIF(SUM(A1.VALORVENDA_DESC),0)
    ,2) AS PORCENTAGEM_APROVADO,

    SUM(
        CASE 
            WHEN A1.STATUS_MOV = 0
            THEN CAST(A1.VALORVENDA_DESC AS NUMERIC(18,2))
            ELSE 0
        END
    ) AS TOTAL_VENDA_REPROVADO,

    ROUND(
        100 *
        SUM(CASE WHEN A1.STATUS_MOV = 0 THEN A1.VALORVENDA_DESC ELSE 0 END)
        /
        NULLIF(SUM(A1.VALORVENDA_DESC),0)
    ,2) AS PORCENTAGEM_REPROVADO,

    SUM(
        CASE 
            WHEN A1.STATUS_MOV = 0
            THEN COALESCE(A2S.QTD_FORMULAS_TOTAL,0)
            ELSE 0
        END
    ) AS quantidade_reprovado

FROM ATENDIMENTO_A1 A1
JOIN CLIENTE CL ON CL.CODIGO = A1.CODIGO_CLIENTE
JOIN FUNCIONARIO FU 
    ON FU.CODIGO = IIF(A1.STATUS_MOV = 0, A1.CADASTRO_LJ, A1.AVIADA_CF)

LEFT JOIN A2_SUM A2S 
    ON A2S.A1_CODIGO = A1.CODIGO

WHERE
A1.TIPO_ATENDIMENTO = 1 ";


        $sql .= " AND CAST(A1.CADASTRO_DT AS DATE) BETWEEN '$DataInicial' AND '$DataFinal'";

        if (!empty($filial) && strtoupper($filial) !== "TODOS") {
            $sql .= " AND A1.CADASTRO_LJ IN ($filial)";
        }
        if (!empty($cliente) && strtoupper($cliente) !== "TODOS") {
            $cliente = str_replace("'", "''", $cliente);
            $sql .= " AND CL.NOMECLIENTE LIKE '%$cliente%'";
        }
        // -- AND FU.CODIGO = :vendedor  -- opcional

        $sql .= " GROUP BY
        A1.CODIGO_CLIENTE,
        CL.NOMECLIENTE

        ORDER BY
        TOTAL_VENDA_APROVADO DESC; ";

        // if (!empty($operacoes) && strtoupper($operacoes) !== "NULL") {
        //     $sql .= " AND A1.codigo_tipooperacao NOT IN ($operacoes)";
        // }
        // if (!empty($ano) && strtoupper($ano) !== "TODOS") {
        //     $sql .= " AND EXTRACT(YEAR FROM A1.aviada_dt) = " . intval($ano);
        // }

        // if (!empty($mes) && strtoupper($mes) !== "TODOS") {
        //     $sql .= " AND EXTRACT(MONTH FROM A1.aviada_dt) = " . intval($mes);
        // }

        $result = ibase_query($connection, $sql);

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

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

        return $dados;
    }
    public function get_cliente_detalhes($id = null, $filial = null, $DataInicial = null, $DataFinal = null, $vendedor = null, $tabela = null)
    {

        $sql_cliente = "SELECT
            A1.CODIGO_CLIENTE AS cod_cliente,
            CL.NOMECLIENTE     AS nome_cliente ,
           A1.cadastro_lj as filial,
           A1.codigo as requisicao,
           A2.numeroformula,
           FU.nomefuncionario as vendedor,
            SUM(A2.valorformula_venda_desc) as valor

        FROM ATENDIMENTO_A1 A1
        JOIN CLIENTE CL ON CL.CODIGO = A1.CODIGO_CLIENTE
        JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(A1.STATUS_MOV = 0, A1.CADASTRO_LJ, A1.AVIADA_CF)
        INNER JOIN ATENDIMENTO_A2 A2 ON A2.codigo_atend_a1 = A1.codigo

        WHERE
        A1.TIPO_ATENDIMENTO = 1";

        $params = [];
        if (!empty($id)) {
            $sql_cliente .= " AND A1.CODIGO_CLIENTE = ?";
            $params[] = $id;
        }
        if (!empty($tabela) && $tabela == '2') {
            $sql_cliente .= " AND A1.STATUS_MOV = '0'";
        }
        if (!empty($tabela) && $tabela == '1') {
            $sql_cliente .= " AND A1.STATUS_MOV  = -1  AND A2.concluidoformula = '-1' ";
        }

        if (!empty($vendedor) && $vendedor !== 'Todos') {
            $sql_cliente .= " AND FU.CODIGO IN ($vendedor)";
        }
        if (!empty($filial) && $filial !== 'Todos') {
            $sql_cliente .= " AND A1.cadastro_lj IN($filial)";
        }
        if (!empty($DataInicial) && !empty($DataFinal)) {
            $sql_cliente .= " AND CAST(A1.CADASTRO_DT AS DATE) BETWEEN '$DataInicial' AND '$DataFinal'";
        } elseif (!empty($DataInicial)) {
            $sql_cliente .= " AND CAST(A1.CADASTRO_DT AS DATE) >= '$DataInicial'";
        } elseif (!empty($DataFinal)) {
            $sql_cliente .= " AND CAST(A1.CADASTRO_DT AS DATE) <= '$DataFinal'";
        }

        // Agrupar por cliente
        $sql_cliente .= "GROUP BY
        A1.CODIGO_CLIENTE,
        CL.NOMECLIENTE
        ,A1.codigo , A1.cadastro_lj ,A2.numeroformula,FU.nomefuncionario ";

        // Preparar e executar a consulta
        $stmt = ibase_prepare($this->connection, $sql_cliente);
        if ($stmt === false) {
            die('Erro na preparação da consulta: ' . ibase_errmsg());
        }

        $result = ibase_execute($stmt, ...$params);

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

        return $clientes_orcamentos;
    }

    public function get_cliente($id = null)
    {
        $sql_cliente = "SELECT

        C.nomecliente as nomepa,
        C.codigo as cod_cliente,
         -- Telefone principal
      (SELECT FIRST 1 TL.TELEFONEPREFIXO || ' ' || TL.TELEFONE
       FROM CADASTRO_TELEFONE TL
      WHERE TL.TIPO_CADASTRO   = 1
        AND TL.CODIGO_CADASTRO = C.CODIGO
        AND TL.PRINCIPAL       = -1) AS TEL,

     (SELECT FIRST 1 TL.TELEFONEPREFIXO || ' ' || TL.TELEFONE
       FROM CADASTRO_TELEFONE TL
      WHERE TL.TIPO_CADASTRO   = 1
        AND TL.CODIGO_CADASTRO = C.CODIGO
        AND TL.PRINCIPAL       = 0) AS TELEFONE2

        from CLIENTE C
        where 1=1";

        $params = [];
        if (!empty($id)) {
            $sql_cliente .= " AND C.codigo = ?";
            $params[] = $id;
        }

        // Preparar e executar a consulta
        $stmt = ibase_prepare($this->connection, $sql_cliente);
        if ($stmt === false) {
            die('Erro na preparação da consulta: ' . ibase_errmsg());
        }

        $result = ibase_execute($stmt, ...$params);

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

        return $clientes_orcamentos;
    }
}
