<?php

class DespesasDiversasController extends Controller
{
    private $diversaModel;

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

    public function index()
    {
        $dados = [
            'despesas' => $this->diversaModel->lerDespesasDiversas()
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/despesas_diversas/index.php',
            'dados'    => $dados
        ]);
    }

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

            $dados = [
                'id_ordem'          => $formulario['id_ordem'] ?? null,
                'descricao'         => strtoupper($formulario['descricao'] ?? ''),
                'quantidade'        => (int)($formulario['quantidade'] ?? 1),
                'valor'             => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['valor'] ?? '0')),
                'id_tipos_despesas' => $formulario['id_tipos_despesas'] ?? null,
                'id_usuario'        => $_SESSION['id_usuario'] ?? 1
            ];

            if ($this->diversaModel->armazenar($dados)) {
                Sessao::mensagem('despesa_diversa', 'Despesa diversa cadastrada com sucesso!');
                URL::redirecionar('despesas_diversas');
            } else {
                Sessao::mensagem('despesa_diversa', 'Erro ao cadastrar despesa', 'alert alert-danger');
            }
        }

        $dados = [
            'ordens'        => $this->diversaModel->lerOrdens(),
            'tipos_despesas'=> $this->diversaModel->lerTiposDespesas()
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/despesas_diversas/cadastrar.php',
            'dados'    => $dados
        ]);
    }

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

            $dados = [
                'id_despesas_diversas' => $id,
                'id_ordem'             => $formulario['id_ordem'] ?? null,
                'descricao'            => strtoupper($formulario['descricao'] ?? ''),
                'quantidade'           => (int)($formulario['quantidade'] ?? 1),
                'valor'                => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['valor'] ?? '0')),
                'id_tipos_despesas'    => $formulario['id_tipos_despesas'] ?? null
            ];

            if ($this->diversaModel->atualizar($dados)) {
                Sessao::mensagem('despesa_diversa', 'Despesa diversa atualizada com sucesso!');
                URL::redirecionar('despesas_diversas');
            } else {
                Sessao::mensagem('despesa_diversa', 'Erro ao atualizar despesa', 'alert alert-danger');
            }
        }

        $despesa = $this->diversaModel->lerDespesaDiversaPorId($id);

        $dados = [
            'despesa'        => $despesa,
            'ordens'         => $this->diversaModel->lerOrdens(),
            'tipos_despesas' => $this->diversaModel->lerTiposDespesas()
        ];

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

    public function visualizar($id)
    {
        $dados = [
            'despesa' => $this->diversaModel->lerDespesaDiversaPorId($id)
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/despesas_diversas/visualizar.php',
            'dados'    => $dados
        ]);
    }

    public function excluir($id)
    {
        if ($this->diversaModel->remover($id)) {
            Sessao::mensagem('despesa_diversa', 'Despesa diversa removida com sucesso!');
        } else {
            Sessao::mensagem('despesa_diversa', 'Erro ao remover despesa', 'alert alert-danger');
        }
        URL::redirecionar('despesas_diversas');
    }
}
