<?php

class FuncoesController extends Controller
{
    private $funcaoModel;

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

    public function index()
    {
        $dados = [
            'funcoes' => $this->funcaoModel->lerFuncoes()
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/funcoes/index.php',
            'dados'    => $dados
        ]);
    }

    public function cadastrar()
    {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

            $dados = [
                'descricao'           => strtoupper($formulario['descricao'] ?? ''),
                'valor_diaria_dentro' => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['valor_diaria_dentro'] ?? '0')),
                'valor_diaria_fora'   => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['valor_diaria_fora'] ?? '0')),
                'id_usuario'          => $_SESSION['id_usuario'] ?? 1
            ];

            if ($this->funcaoModel->armazenar($dados)) {
                Sessao::mensagem('funcao', 'Função cadastrada com sucesso!');
                URL::redirecionar('funcoes');
            } else {
                Sessao::mensagem('funcao', 'Erro ao cadastrar função', 'alert alert-danger');
            }
        }

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

    public function editar($id)
    {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

            $dados = [
                'id_funcao'           => $id,
                'descricao'           => strtoupper($formulario['descricao'] ?? ''),
                'valor_diaria_dentro' => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['valor_diaria_dentro'] ?? '0')),
                'valor_diaria_fora'   => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['valor_diaria_fora'] ?? '0'))
            ];

            if ($this->funcaoModel->atualizar($dados)) {
                Sessao::mensagem('funcao', 'Função atualizada com sucesso!');
                URL::redirecionar('funcoes');
            } else {
                Sessao::mensagem('funcao', 'Erro ao atualizar função', 'alert alert-danger');
            }
        }

        $funcao = $this->funcaoModel->lerFuncaoPorId($id);

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

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

    public function visualizar($id)
    {
        $dados = [
            'funcao' => $this->funcaoModel->lerFuncaoPorId($id)
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/funcoes/visualizar.php',
            'dados'    => $dados
        ]);
    }

    public function excluir($id)
    {
        if ($this->funcaoModel->remover($id)) {
            Sessao::mensagem('funcao', 'Função removida com sucesso!');
        } else {
            Sessao::mensagem('funcao', 'Erro ao remover função', 'alert alert-danger');
        }
        URL::redirecionar('funcoes');
    }
}
