<?php
// Define o caminho base do sistema
if (!defined('PATH_SIS')) {
    $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://';
    $host = $_SERVER['HTTP_HOST'];
    $scriptName = dirname(dirname($_SERVER['SCRIPT_NAME']));
    define('PATH_SIS', rtrim($protocol . $host . $scriptName, '/') . '/');
}

$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';
} 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 Configuracoes
{
    private $connectionmysql;
    private $connection;

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

    // Método para obter o tipo de meta do período
    public function getPeriodo()
    {
        $sql_preferencia = "SELECT c.valor1 as tipo_meta 
            FROM  configuracoes c 
            WHERE c.tipo_meta = 'Período'";

        $result = $this->connectionmysql->query($sql_preferencia);

        if ($result && $result->num_rows > 0) {
            $row = $result->fetch_assoc();
            return $row['tipo_meta'];
        }

        return null;
    }


    public function getPeriodoSemana($ano = null, $mes = null, $semana = null)
    {
        $sql = "SELECT 
            MIN(ds.data_inicial) AS data_inicial,
            MAX(ds.data_final)   AS data_final
        FROM dias_semana ds
        WHERE 1=1 ";

        $params = [];
        $types = "";

        if (!empty($ano)) {
            $sql .= " AND YEAR(ds.data_inicial) = ?";
            $params[] = $ano;
            $types .= "i";
        }

        if (!empty($mes)) {
            $sql .= " AND MONTH(ds.data_inicial) = ?";
            $params[] = $mes;
            $types .= "i";
        }

        if (!empty($semana) && $semana != 'mes') {
            $sql .= " AND ds.semana_mes = ?";
            $params[] = $semana;
            $types .= "i";
        }

        $stmt = $this->connectionmysql->prepare($sql);

        if (!empty($params)) {
            $stmt->bind_param($types, ...$params);
        }

        $stmt->execute();
        $result = $stmt->get_result();

        if ($result && $result->num_rows > 0) {
            $row = $result->fetch_assoc();

            if (!empty($row['data_inicial']) && !empty($row['data_final'])) {
                return [
                    "data_inicial" => $row['data_inicial'],
                    "data_final"   => $row['data_final'],
                ];
            }
        }

        // 🔹 Se não encontrou nada → devolve o 1º e último dia do mês/ano
        if (!empty($ano) && !empty($mes)) {
            $dataInicio = new DateTime("$ano-$mes-01");
            $dataFim    = new DateTime($dataInicio->format("Y-m-t")); // último dia do mês

            return [
                "data_inicial" => $dataInicio->format("Y-m-d"),
                "data_final"   => $dataFim->format("Y-m-d"),
            ];
        }

        // 🔹 Se não passou ano/mês → usa mês/ano atuais
        $dataInicio = new DateTime("first day of this month");
        $dataFim    = new DateTime("last day of this month");

        return [
            "data_inicial" => $dataInicio->format("Y-m-d"),
            "data_final"   => $dataFim->format("Y-m-d"),
        ];
    }
    // QUERY PARA PEGAR O VALOR DO DIA ÚTIL
    public function getPesoDiaAtual($mes, $ano, $id_cidade_atual, $periodo, $semana = null)
    {
        $caixaliberado = $this->getCaixaLiberado($ano, $mes);
        if (!empty($semana)) {
            $meu_periodo = $this->getPeriodo();
            if ($meu_periodo == 'Semana') {
                $periodo_semana = $this->getPeriodoSemana($ano, $mes, $semana);
                if ($periodo_semana) {
                    $data_inicio = $periodo_semana['data_inicial'];
                    $data_fim    = $periodo_semana['data_final'];
                }
            }
        }
        $query_diaatual = "SELECT SUM(peso) AS peso_atual 
                           FROM dia_trabalho_cidade dc
                           INNER JOIN cidade c ON c.id_cidade = dc.id_cidade
                           INNER JOIN dia_trabalho dt ON dt.id_dia_trabalho = dc.id_dia_trabalho
                           INNER JOIN tipo_dia td ON td.id_tipo_dia = dc.id_tipo_dia
                           WHERE MONTH(dia_trabalho) = $mes 
                           AND YEAR(dia_trabalho) = $ano
                           AND c.id_cidade = $id_cidade_atual";

        if (!empty($periodo)) {
            if ($periodo == 1) {
                $query_diaatual .= " AND DAY(dia_trabalho) <= 15";
            } elseif ($periodo == 2) {
                $query_diaatual .= " AND DAY(dia_trabalho) > 15";
            } elseif ($periodo == 'mes') {
                $query_diaatual .= " AND dia_trabalho <= '$caixaliberado'";
            }
        }
        if (!empty($semana)) {
            if (!empty($data_inicio) && !empty($data_fim)) {
                $query_diaatual .= " AND dia_trabalho BETWEEN '$data_inicio' AND '$data_fim'";
            }
        }
        //echo $query_diaatual;
        $result_diaatual = $this->connectionmysql->query($query_diaatual);

        if (!$result_diaatual) {
            die('Erro na consulta caiu aqui: ' . $this->connectionmysql->error);
        }

        $row_diaatual = $result_diaatual->fetch_assoc();
        return isset($row_diaatual["peso_atual"]) ? $row_diaatual["peso_atual"] : 0;
    }

    // QUERY PARA PEGAR O VALOR DO DIA ÚTIL
    public function getPesoUltimoDia($mes, $ano, $id_cidade_atual, $periodo, $semana = null)
    {
        if (!empty($semana)) {
            $meu_periodo = $this->getPeriodo();
            if ($meu_periodo == 'Semana') {
                $periodo_semana = $this->getPeriodoSemana($ano, $mes, $semana);
                if ($periodo_semana) {
                    $data_inicio = $periodo_semana['data_inicial'];
                    $data_fim    = $periodo_semana['data_final'];
                }
            }
        }
        $query_ultimodia = "SELECT SUM(peso) AS peso_ultimo 
                            FROM dia_trabalho_cidade dc
                            INNER JOIN cidade c ON c.id_cidade = dc.id_cidade
                            INNER JOIN dia_trabalho dt ON dt.id_dia_trabalho = dc.id_dia_trabalho
                            INNER JOIN tipo_dia td ON td.id_tipo_dia = dc.id_tipo_dia
                            WHERE MONTH(dia_trabalho) = $mes 
                              AND YEAR(dia_trabalho) = $ano 
                              AND c.id_cidade = '$id_cidade_atual'";

        if (!empty($periodo)) {
            if ($periodo == 1) {
                $query_ultimodia .= " AND DAY(dia_trabalho) <= 15";
            } elseif ($periodo == 2) {
                $query_ultimodia .= " AND DAY(dia_trabalho) > 15";
            }
        } 
        if (!empty($semana)) {
            if (!empty($data_inicio) && !empty($data_fim)) {
                $query_ultimodia .= " AND dia_trabalho BETWEEN '$data_inicio' AND '$data_fim'";
            }
        }
        $result_ultimodia = $this->connectionmysql->query($query_ultimodia);

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

        $row_ultimodia = $result_ultimodia->fetch_assoc();
        return isset($row_ultimodia["peso_ultimo"]) ? $row_ultimodia["peso_ultimo"] : 0;
    }

    public function get_nomeclatura_vendedor($plural = false)
    {
        // Consulta para buscar os valores armazenados no banco
        $sql = "SELECT valor1, valor2 FROM configuracoes WHERE tipo_meta = 'Nome Vendedor'";
        $result = $this->connectionmysql->query($sql);

        // Se encontrar os valores, retorna o correspondente
        if ($result && $result->num_rows > 0) {
            $row = $result->fetch_assoc();
            return $plural ? $row['valor2'] : $row['valor1'];
        }

        // Se não encontrar, retorna os valores padrão
        return $plural ? 'Vendedores' : 'Vendedor';
    }

    // QUERY PARA PEGAR O VALOR DO DIA ÚTIL CASO  CIDADE = TODOS
    public function getPesoAtualTodos($mes, $ano, $caixaliberado, $periodo, $semana = null)
    {
        if (!empty($semana)) {
            $meu_periodo = $this->getPeriodo();
            if ($meu_periodo == 'Semana') {
                $periodo_semana = $this->getPeriodoSemana($ano, $mes, $semana);
                if ($periodo_semana) {
                    $data_inicio = $periodo_semana['data_inicial'];
                    $data_fim    = $periodo_semana['data_final'];
                }
            }
        }
        $query_diaatual = "
            SELECT
                SUM(soma_pesos) / COUNT(DISTINCT nome_cidade) AS peso_atual
            FROM (
                SELECT
                    c.nome_cidade,
                    SUM(peso) AS soma_pesos
                FROM
                    dia_trabalho_cidade dc
                INNER JOIN
                    cidade c ON c.id_cidade = dc.id_cidade
                INNER JOIN
                    dia_trabalho dt ON dt.id_dia_trabalho = dc.id_dia_trabalho
                INNER JOIN
                    tipo_dia td ON td.id_tipo_dia = dc.id_tipo_dia
                WHERE
                    MONTH(dia_trabalho) = $mes
                    AND YEAR(dia_trabalho) = $ano
                    AND dia_trabalho <= '$caixaliberado'";
        // Condicionamento com base no período
        if (!empty($periodo)) {
            if ($periodo == 1) {
                $query_diaatual .= " AND DAY(dia_trabalho) <= 15";
            } elseif ($periodo == 2) {
                $query_diaatual .= " AND DAY(dia_trabalho) > 15";
            } elseif ($periodo == 'mes') {
                $query_diaatual .= " AND dia_trabalho <= '$caixaliberado'";
            }
        } 
        if (!empty($semana)) {
            if (!empty($data_inicio) && !empty($data_fim)) {
                $query_diaatual .= " AND dia_trabalho BETWEEN '$data_inicio' AND '$data_fim'";
            }
        }

        // Fechamento da consulta com agrupamento
        $query_diaatual .= "
            GROUP BY
                c.nome_cidade
        ) AS subconsulta";

        // Executa a consulta
        $result_diaatual = $this->connectionmysql->query($query_diaatual);

        // Verifica se a consulta foi bem-sucedida
        if (!$result_diaatual) {
            die('Erro na consulta: ' . $this->connectionmysql->error);
        }

        // Obtém o resultado e retorna o peso atual
        $row_diaatual = $result_diaatual->fetch_assoc();
        return isset($row_diaatual["peso_atual"]) ? $row_diaatual["peso_atual"] : 0;
    }

    // QUERY PARA PEGAR O VALOR DO DIA ÚTIL CASO  CIDADE = TODOS
    public function getPesoUltimoDiaTodos($mes, $ano, $periodo, $semana = null)
    {
        if (!empty($semana)) {
            $meu_periodo = $this->getPeriodo();
            if ($meu_periodo == 'Semana') {
                $periodo_semana = $this->getPeriodoSemana($ano, $mes, $semana);
                if ($periodo_semana) {
                    $data_inicio = $periodo_semana['data_inicial'];
                    $data_fim    = $periodo_semana['data_final'];
                }
            }
        }
        $query_ultimodia = "
            SELECT
                SUM(soma_pesos) / COUNT(DISTINCT nome_cidade) AS peso_ultimo
            FROM (
                SELECT
                    c.nome_cidade,
                    SUM(peso) AS soma_pesos
                FROM
                    dia_trabalho_cidade dc
                INNER JOIN
                    cidade c ON c.id_cidade = dc.id_cidade
                INNER JOIN
                    dia_trabalho dt ON dt.id_dia_trabalho = dc.id_dia_trabalho
                INNER JOIN
                    tipo_dia td ON td.id_tipo_dia = dc.id_tipo_dia
                WHERE
                    MONTH(dia_trabalho) = $mes
                    AND YEAR(dia_trabalho) = $ano";
        if (!empty($periodo)) {
            if ($periodo == 1) {
                $query_ultimodia .= " AND DAY(dia_trabalho) <= 15";
            } elseif ($periodo == 2) {
                $query_ultimodia .= " AND DAY(dia_trabalho) > 15";
            }
        } 
        if (!empty($semana)) {
            if (!empty($data_inicio) && !empty($data_fim)) {
                $query_ultimodia .= " AND dia_trabalho BETWEEN '$data_inicio' AND '$data_fim'";
            }
        }


        $query_ultimodia .= "
                GROUP BY
                    c.nome_cidade
            ) AS subconsulta";

        $result_ultimodia = $this->connectionmysql->query($query_ultimodia);

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

        $row_ultimodia = $result_ultimodia->fetch_assoc();
        return isset($row_ultimodia["peso_ultimo"]) ? $row_ultimodia["peso_ultimo"] : 0;
    }

    // Método para obter o caixa liberado
    public function getCaixaLiberado($ano, $mes, $filial = null)
    {
        // PREPARAÇÃO DE DATAS OTIMIZADAS
        $ano_formatado = str_pad($ano, 4, '0', STR_PAD_LEFT);
        $mes_formatado = str_pad($mes, 2, '0', STR_PAD_LEFT);
        
        $ultimo_dia = date("t", mktime(0, 0, 0, $mes_formatado, 1, $ano_formatado));
        
        $data_inicio_sql = "$ano_formatado-$mes_formatado-01";
        $data_fim_sql    = "$ano_formatado-$mes_formatado-$ultimo_dia";

        // --- Limitar a busca do banco até o dia anterior (Ontem) ---
        $data_ontem = date('Y-m-d', strtotime('-1 day'));
        if ($data_fim_sql > $data_ontem) {
            $data_fim_sql = $data_ontem;
        }

        $query_caixa_livre = "SELECT
            MAX(CAST(A1.entregue_dt AS DATE)) AS DTOPE_COMUM
            FROM
            ATENDIMENTO_A1 A1
            WHERE
            A1.TIPO_ATENDIMENTO = 1
            AND CAST(A1.entregue_dt AS DATE) BETWEEN '$data_inicio_sql' 
            AND '$data_fim_sql'";

        if (!empty($filial) && $filial !== 'Todos' && $filial !== 'Selecione') {
            $query_caixa_livre .= " AND A1.CADASTRO_LJ IN ($filial)";
        }

        $result_caixa_livre = ibase_query($this->connection, $query_caixa_livre);

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

        $caixaliberado = [];
        while ($row = ibase_fetch_assoc($result_caixa_livre)) {
            $caixaliberado[] = $row;
        }

        // TRATAMENTO DO RETORNO
        if (!empty($caixaliberado[0]['DTOPE_COMUM'])) {
            $caixa = $caixaliberado[0]['DTOPE_COMUM'];
        } else {
            // Fallback: se não tiver dados, joga para o 1º dia do mês pesquisado
            $caixa = "$ano_formatado-$mes_formatado-01";
        }

        // Essa trava garante que ele seja reajustado para ontem.
        if ($caixa > $data_ontem) {
            $caixa = $data_ontem;
        }

        return !empty($caixa) ? $caixa : null;
    }

    public function removeAcentos($string)
    {
        $acentos = array(
            'á',
            'à',
            'ã',
            'â',
            'ä',
            'é',
            'è',
            'ê',
            'ë',
            'í',
            'ì',
            'î',
            'ï',
            'ó',
            'ò',
            'õ',
            'ô',
            'ö',
            'ú',
            'ù',
            'û',
            'ü',
            'ç',
            'Á',
            'À',
            'Ã',
            'Â',
            'Ä',
            'É',
            'È',
            'Ê',
            'Ë',
            'Í',
            'Ì',
            'Î',
            'Ï',
            'Ó',
            'Ò',
            'Õ',
            'Ô',
            'Ö',
            'Ú',
            'Ù',
            'Û',
            'Ü',
            'Ç'
        );

        $semAcentos = array(
            'a',
            'a',
            'a',
            'a',
            'a',
            'e',
            'e',
            'e',
            'e',
            'i',
            'i',
            'i',
            'i',
            'o',
            'o',
            'o',
            'o',
            'o',
            'u',
            'u',
            'u',
            'u',
            'c',
            'A',
            'A',
            'A',
            'A',
            'A',
            'E',
            'E',
            'E',
            'E',
            'I',
            'I',
            'I',
            'I',
            'O',
            'O',
            'O',
            'O',
            'O',
            'U',
            'U',
            'U',
            'U',
            'C'
        );

        return str_replace($acentos, $semAcentos, $string);
    }


    public function get_operacoes_em_uso()
    {

        $sql = "SELECT  p.valor FROM configuracoes c 
        LEFT JOIN preferencias p on p.id_configuracoes = c.id_configuracoes
        WHERE  c.tipo_meta = 'Operações'";

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

        $resultmeta = [];

        if ($stmt) {
            while ($row = $stmt->fetch_assoc()) {
                $resultmeta[] = $row['valor'];
            }
        } else {
            die('Erro na consulta: ' . $this->connectionmysql->error);
        }

        return $resultmeta;
    }



    // public function getPainelVisitadores()
    // {
    //     $sql_preferencia = "SELECT c.id_configuracoes, c.tipo_meta, c.valor1, c.valor2
    //         FROM  configuracoes c 
    //         WHERE c.tipo_meta = 'Painel Visitadores'";

    //     $resultmeta = $this->connectionmysql->query($sql_preferencia);

    //     $result = '';

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