<?php

class DecretosController extends Controller
{
    private $decretoModel;

    public function __construct()
    {
        if (!Sessao::estaLogado()) {
            URL::redirecionar('usuarios/login');
        }
        $this->decretoModel = $this->model('Decreto');
    }

    // Método para listar todos os decretos
    public function index()
    {
        $dados = [
            'decretos' => $this->decretoModel->listarTodos()
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/decretos/index.php',
            'dados'    => $dados
        ]);
    }

    // Método para cadastrar um novo decreto
    
        public function cadastrar(){

    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
       // error_log(">>> Recebeu POST");
        //echo '<pre>';
        //var_dump($_POST);
        //var_dump($_FILES);
        //echo '</pre>';
        //exit; // Para debug

        $formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

        $dados = [
            'titulo' => strtoupper($formulario['titulo'] ?? ''),
            'ano' => $formulario['ano'] ?? '',
            'descricao' => $formulario['descricao'] ?? '',
            'arquivo_pdf' => '',
            'id_usuario' => $_SESSION['id_usuario'] ?? 1
        ];

        if (isset($_FILES['arquivo_pdf']) && $_FILES['arquivo_pdf']['error'] === UPLOAD_ERR_OK) {
            $nome = uniqid() . '_' . basename($_FILES['arquivo_pdf']['name']);
            $destino = dirname(__DIR__, 2) . '/public/uploads/decretos/';

            if (!is_dir($destino)) {
                mkdir($destino, 0777, true);
            }

            if (move_uploaded_file($_FILES['arquivo_pdf']['tmp_name'], $destino . $nome)) {
                $dados['arquivo_pdf'] = $nome;
            } else {
                Sessao::mensagem('decretos', 'Erro ao mover o arquivo.', 'alert alert-danger');
                URL::redirecionar('decretos/cadastrar');
            }
        }

        if ($this->decretoModel->armazenar($dados)) {
            Sessao::mensagem('decretos', 'Decreto cadastrado com sucesso!', 'alert alert-success');
            URL::redirecionar('decretos');
        } else {
            Sessao::mensagem('decretos', 'Erro ao salvar no banco.', 'alert alert-danger');
        }
    }

    // Exibe o formulário
    $this->view('layout', [
        'conteudo' => __DIR__ . '/../Views/decretos/cadastrar.php'
    ]);
}




    // Método para editar um decreto
    public function editar($id)
    {
        // Verificando se foi enviado o formulário
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            // Filtrando os dados do formulário
            $formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

            // Preparando os dados para atualização
            $dados = [
                'id_decreto' => $id,
                'titulo'     => strtoupper($formulario['titulo'] ?? ''),
                'numero'     => $formulario['numero'] ?? '',
                'ano'        => $formulario['ano'] ?? '',
                'descricao'  => $formulario['descricao'] ?? '',
                'arquivo_pdf'=> null, // Mantém o arquivo atual caso não seja alterado
            ];

            // Verificar se foi feito upload de um arquivo PDF
            if (isset($_FILES['arquivo_pdf']) && $_FILES['arquivo_pdf']['error'] === UPLOAD_ERR_OK) {
                $upload_dir = 'public/uploads/decretos/';
                $arquivo_pdf = $_FILES['arquivo_pdf']['name'];
                move_uploaded_file($_FILES['arquivo_pdf']['tmp_name'], $upload_dir . $arquivo_pdf);
                $dados['arquivo_pdf'] = $arquivo_pdf;
            }

            // Chamando o modelo para atualizar os dados no banco
            if ($this->decretoModel->atualizar($dados)) {
                Sessao::mensagem('decreto', 'Decreto atualizado com sucesso!');
                URL::redirecionar('decretos');
            } else {
                Sessao::mensagem('decreto', 'Erro ao atualizar decreto', 'alert alert-danger');
            }
        }

        // Buscando os dados do decreto a ser editado
        $decreto = $this->decretoModel->buscarPorId($id);

        $dados = [
            'decreto' => $decreto
        ];

        // Exibindo o formulário de edição com os dados do decreto
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/decretos/editar.php',
            'dados'    => $dados
        ]);
    }

    // Método para visualizar um decreto
    public function visualizar($id)
    {
        $dados = [
            'decreto' => $this->decretoModel->buscarPorId($id)
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/decretos/visualizar.php',
            'dados'    => $dados
        ]);
    }

    // Método para excluir um decreto
    public function excluir($id)
    {
        if ($this->decretoModel->excluir($id)) {
            Sessao::mensagem('decreto', 'Decreto removido com sucesso!');
        } else {
            Sessao::mensagem('decreto', 'Erro ao remover decreto', 'alert alert-danger');
        }
        URL::redirecionar('decretos');
    }

    // Método para exibir o formulário de cadastro/edição de um decreto
    public function formulario($id = null)
    {
        if ($id) {
            $decreto = $this->decretoModel->buscarPorId($id);
        } else {
            $decreto = null;
        }

        $dados = [
            'decreto' => $decreto
        ];

        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/decretos/formulario.php',
            'dados'    => $dados
        ]);
    }
}
