<?php
// Ativar o log de erros e definir o arquivo de log
ini_set('log_errors', 1);
ini_set('error_log', '/caminho/para/seu/logfile.log'); // Altere para o caminho desejado

// O restante do seu código
class Decreto
{
    private $db;

    public function __construct()
    {
        // Obtendo a instância da conexão com o banco de dados
        $this->db = Database::getInstance();
    }

    // Método para listar todos os decretos
    public function listarTodos()
    {
        // Consulta para pegar todos os decretos não removidos, ordenados pela data de criação
        $sql = "SELECT * FROM decretos WHERE removido IS NULL ORDER BY criado_em DESC";
        
        // Executar a consulta
        $stmt = $this->db->prepare($sql);
        $stmt->execute();
        
        // Retornar os resultados como objetos (não arrays)
        return $stmt->fetchAll(PDO::FETCH_OBJ);
    }

    // Método para buscar um decreto por ID
    public function buscarPorId($id)
    {
        // Consulta para pegar um decreto específico
        $sql = "SELECT * FROM decretos WHERE id_decreto = :id AND removido IS NULL";
        $params = [':id' => $id];  // Bind do parâmetro id
        return $this->query($sql, $params);  // Retorna um único resultado
    }

    // Método para inserir um novo decreto
    public function inserir($dados)
    {
        // Consulta de inserção
        $sql = "INSERT INTO decretos (titulo, numero, ano, descricao, arquivo_pdf, criado_em, id_usuario)
                VALUES (:titulo, :numero, :ano, :descricao, :arquivo_pdf, NOW(), :id_usuario)";
        $params = [
            ':titulo'     => $dados['titulo'],
            ':numero'     => $dados['numero'],
            ':ano'        => $dados['ano'],
            ':descricao'  => $dados['descricao'],
            ':arquivo_pdf'=> $dados['arquivo_pdf'],
            ':id_usuario' => $dados['id_usuario']
        ];
        return $this->query($sql, $params);  // Retorna TRUE ou FALSE dependendo do sucesso da operação
    }

    // Método para atualizar um decreto
    public function atualizar($dados)
    {
        // Consulta para atualizar os dados do decreto
        $sql = "UPDATE decretos 
                SET titulo = :titulo, numero = :numero, ano = :ano, descricao = :descricao, 
                    arquivo_pdf = :arquivo_pdf, alterado = NOW()
                WHERE id_decreto = :id_decreto";
        $params = [
            ':titulo'     => $dados['titulo'],
            ':numero'     => $dados['numero'],
            ':ano'        => $dados['ano'],
            ':descricao'  => $dados['descricao'],
            ':arquivo_pdf'=> $dados['arquivo_pdf'],
            ':id_decreto' => $dados['id_decreto']
        ];
        return $this->query($sql, $params);  // Retorna o número de linhas afetadas
    }

    // Método para excluir (marcar como removido) um decreto
    public function excluir($id)
    {
        // Consulta para marcar o decreto como removido
        $sql = "UPDATE decretos SET removido = NOW() WHERE id_decreto = :id";
        $params = [':id' => $id];  // Bind do parâmetro id
        return $this->query($sql, $params);  // Retorna o número de linhas afetadas
    }

    // Método genérico para executar as consultas SQL
    private function query($sql, $params = [])
    {
        // Preparando a consulta SQL
        $stmt = $this->db->prepare($sql);

        // Bind dos parâmetros para evitar injeção de SQL
        foreach ($params as $key => $value) {
            $stmt->bindValue($key, $value);
        }

        // Executando a consulta
        $stmt->execute();

        // Verifica se a consulta é um SELECT
        if (strpos($sql, "SELECT") === false) {
            return $stmt->rowCount();  // Retorna o número de linhas afetadas por INSERT/UPDATE/DELETE
        }

        // Retorna o resultado de um SELECT como um array de objetos
        return $stmt->fetchAll(PDO::FETCH_OBJ);
    }

    public function lerDecretos()
    {
        return $this->listarTodos(); // Chama o método listarTodos
    }

    // Método para armazenar um novo decreto
    public function armazenar($dados)
{
    try {

        error_log("Dados recebidos: " . print_r($dados, true));
        $sql = "INSERT INTO decretos (titulo, ano, descricao, arquivo_pdf, id_usuario, criado_em)
                VALUES (:titulo, :ano, :descricao, :arquivo_pdf, :id_usuario, NOW())";

        $stmt = $this->db->prepare($sql);
        $stmt->bindParam(':titulo', $dados['titulo']);
        $stmt->bindParam(':ano', $dados['ano']);
        $stmt->bindParam(':descricao', $dados['descricao']);
        $stmt->bindParam(':arquivo_pdf', $dados['arquivo_pdf']);
        $stmt->bindParam(':id_usuario', $dados['id_usuario']);

        return $stmt->execute();
    } catch (Exception $e) {
        error_log("Erro ao inserir decreto: " . $e->getMessage());
        return false;
    }
}

}

