<?php

class DiariasFuncionariosController extends Controller
{
    private $diariaModel;

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

    public function index()
    {
        $dados = [
            'diarias' => $this->diariaModel->lerDiarias()
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/diarias_funcionarios/index.php',
            'dados'    => $dados
        ]);
    }

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

            $qtde = (float)($formulario['qtde'] ?? 1);
            $valor = str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['valor'] ?? '0'));
            $total = $qtde * $valor;

            $dados = [
                'id_ordem'      => $formulario['id_ordem'] ?? null,
                'id_funcionario'=> $formulario['id_funcionario'] ?? null,
                'qtde'          => $qtde,
                'valor'         => $valor,
                'total'         => $total,
                'id_usuario'    => $_SESSION['id_usuario'] ?? 1
            ];

            if ($this->diariaModel->armazenar($dados)) {
                Sessao::mensagem('diarias_funcionarios', 'Diária cadastrada com sucesso!');
                URL::redirecionar('diarias_funcionarios');
            } else {
                Sessao::mensagem('diarias_funcionarios', 'Erro ao cadastrar diária', 'alert alert-danger');
            }
        }

        $dados = [
            'ordens'       => $this->diariaModel->lerOrdens(),
            'funcionarios' => $this->diariaModel->lerFuncionarios()
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/diarias_funcionarios/cadastrar.php',
            'dados'    => $dados
        ]);
    }

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

            $qtde = (float)($formulario['qtde'] ?? 1);
            $valor = str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['valor'] ?? '0'));
            $total = $qtde * $valor;

            $dados = [
                'id_diarias_funcionarios' => $id,
                'id_ordem'      => $formulario['id_ordem'] ?? null,
                'id_funcionario'=> $formulario['id_funcionario'] ?? null,
                'qtde'          => $qtde,
                'valor'         => $valor,
                'total'         => $total
            ];

            if ($this->diariaModel->atualizar($dados)) {
                Sessao::mensagem('diarias_funcionarios', 'Diária atualizada com sucesso!');
                URL::redirecionar('diarias_funcionarios');
            } else {
                Sessao::mensagem('diarias_funcionarios', 'Erro ao atualizar diária', 'alert alert-danger');
            }
        }

        $diaria = $this->diariaModel->lerDiariaPorId($id);

        $dados = [
            'diaria'       => $diaria,
            'ordens'       => $this->diariaModel->lerOrdens(),
            'funcionarios' => $this->diariaModel->lerFuncionarios()
        ];

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

    public function visualizar($id)
    {
        $dados = [
            'diaria' => $this->diariaModel->lerDiariaPorId($id)
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/diarias_funcionarios/visualizar.php',
            'dados'    => $dados
        ]);
    }

    public function excluir($id)
    {
        if ($this->diariaModel->remover($id)) {
            Sessao::mensagem('diarias_funcionarios', 'Diária removida com sucesso!');
        } else {
            Sessao::mensagem('diarias_funcionarios', 'Erro ao remover diária', 'alert alert-danger');
        }
        URL::redirecionar('diarias_funcionarios');
    }
}
