<?php

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

class ConfiguracaoMetas
{
    private $mysqlConnection;

    public function __construct($mysqlConnection)
    {
        $this->mysqlConnection = $mysqlConnection;
    }

    public function consultaPermissoes($id = null, $id_tipo_meta = null, $sql = '')
    {
        // Consulta SQL padrão para buscar todas as filiais
        $query_config_metas = "SELECT * FROM configuracao_metas WHERE 1=1 $sql";

        // Armazena os parâmetros e seus tipos para o bind
        $params = [];
        $types = '';

        // Condicional para verificar se os parâmetros foram passados e construir a query e os parâmetros adequados
        if (!empty($id)) {
            $query_config_metas .= " AND configuracao_metas.id = ?";
            $params[] = $id;
            $types .= 'i';  // Tipo 'i' para integer
        }

        if (!empty($id_tipo_meta)) {
            $query_config_metas .= " AND configuracao_metas.id_tipo_meta = ?";
            $params[] = $id_tipo_meta;
            $types .= 'i';  // Tipo 'i' para integer
        }

        // Prepara a consulta
        $stmt = $this->mysqlConnection->prepare($query_config_metas);
        if (!$stmt) {
            die('Erro na preparação da consulta MySQL: ' . $this->mysqlConnection->error);
        }

        // Se houver parâmetros, fazemos o bind deles
        if (!empty($params)) {
            $stmt->bind_param($types, ...$params);
        }

        // Executa a consulta
        if (!$stmt->execute()) {
            die('Erro na execução da consulta MySQL: ' . $stmt->error);
        }

        // Obtém o resultado
        $result = $stmt->get_result();
        if (!$result) {
            die('Erro ao obter resultado MySQL: ' . $stmt->error);
        }

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

        // Fecha a consulta
        $stmt->close();

        return $config_metas;
    }

    public function addConfig($mysqlConnection)
    {
        // Verifica se os dados foram enviados via POST
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {

            // Verifica se os campos necessários estão presentes
            if (isset($_POST['id_tipo_meta']) && isset($_POST['nome_meta'])) {

                // Escapa e atribui os valores do POST
                $id_tipo_meta = $mysqlConnection->real_escape_string($_POST['id_tipo_meta']);
                $nome_meta = $mysqlConnection->real_escape_string($_POST['nome_meta']);
                $nome_valores = $mysqlConnection->real_escape_string($_POST['nome_valores']);

                // Verifica se o id_tipo_meta já existe no banco de dados
                $checkQuery = "SELECT id_tipo_meta FROM configuracao_metas WHERE id_tipo_meta = ?";
                $checkStmt = $mysqlConnection->prepare($checkQuery);
                if (!$checkStmt) {
                    die('Erro na preparação da consulta de verificação MySQL: ' . $mysqlConnection->error);
                }

                $checkStmt->bind_param("i", $id_tipo_meta);
                $checkStmt->execute();
                $checkStmt->store_result(); // Armazena o resultado da consulta

                if ($checkStmt->num_rows > 0) {
                    // Se já existe um registro com o id_tipo_meta, define uma mensagem de erro
                    $_SESSION['message'] = 'Este tipo de meta já está cadastrado. Por favor, escolha outro.';
                } else {
                    // Prepara a consulta SQL de inserção, se o id_tipo_meta não existir
                    $query = "INSERT INTO configuracao_metas (id_tipo_meta, nome_meta, nome_valores) VALUES (?, ?, ?)";
                    $stmt = $mysqlConnection->prepare($query);
                    if (!$stmt) {
                        die('Erro na preparação da consulta MySQL: ' . $mysqlConnection->error);
                    }

                    // Vincula os parâmetros
                    $stmt->bind_param("iss", $id_tipo_meta, $nome_meta, $nome_valores);

                    // Executa a consulta
                    if ($stmt->execute()) {
                        $_SESSION['message'] = 'Meta adicionada com sucesso!';
                    } else {
                        $_SESSION['message'] = 'Erro ao adicionar meta: ' . $stmt->error;
                    }

                    // Fecha a declaração
                    $stmt->close();
                }

                // Fecha a consulta de verificação
                $checkStmt->close();
            } else {
                $_SESSION['message'] = 'Selecionar uma meta é obrigatório.';
            }

            // Redireciona para a mesma página
            header('Location: ' . $_SERVER['PHP_SELF']);
            exit();
        }
    }

    public function desativaMeta($mysqlConnection)
    {
        // Verifica se o ID foi enviado via GET
        if (isset($_GET['id'])) {

            // Escapa o valor do GET
            $id_tipo_meta = $mysqlConnection->real_escape_string($_GET['id']);

            // Prepara a consulta SQL de exclusão
            $query = "DELETE FROM configuracao_metas WHERE id = ?";

            // Prepara a declaração
            $stmt = $mysqlConnection->prepare($query);
            if (!$stmt) {
                die('Erro na preparação da consulta MySQL: ' . $mysqlConnection->error);
            }

            // Vincula o parâmetro
            $stmt->bind_param("i", $id_tipo_meta);

            // Executa a consulta
            if ($stmt->execute()) {
                // Mensagem de sucesso
                echo "<script>alert('Meta removida com sucesso!');</script>";

                // Redireciona para recarregar a página sem o parâmetro de ID
                echo "<script>window.location.href = window.location.pathname;</script>";
            } else {
                echo "Erro ao remover meta: " . $stmt->error;
            }

            // Fecha a declaração
            $stmt->close();
        }
    }

    public function listarMetas($id = null, $sql = '')
    {
        // Consulta SQL padrão para buscar todas as filiais
        $sql = "SELECT * FROM tipos_meta $sql";

        // Armazena os parâmetros e seus tipos para o bind
        $params = [];
        $types = '';

        // Condicional para verificar se os parâmetros foram passados e construir a query e os parâmetros adequados
        if (!empty($id)) {
            $sql .= " AND tipos_meta.id = ?";
            $params[] = $id;
            $types .= 'i';  // Tipo 'i' para integer
        }

        // Prepara a consulta
        $stmt = $this->mysqlConnection->prepare($sql);
        if (!$stmt) {
            die('Erro na preparação da consulta MySQL: ' . $this->mysqlConnection->error);
        }

        // Se houver parâmetros, fazemos o bind deles
        if (!empty($params)) {
            $stmt->bind_param($types, ...$params);
        }

        // Executa a consulta
        if (!$stmt->execute()) {
            die('Erro na execução da consulta MySQL: ' . $stmt->error);
        }

        // Obtém o resultado
        $result = $stmt->get_result();
        if (!$result) {
            die('Erro ao obter resultado MySQL: ' . $stmt->error);
        }

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

        // Fecha a consulta
        $stmt->close();

        return $tiposMetas;
    }
}
