<?php

class Funcionario extends CI_Controller {

    private $modelPagina = 'funcionario_model';

    const TABELA_BANCO_FUNCIONARIO = 'tbl_010_funcionario';

    public function __construct() {
        parent::__construct();
        $this->load->helper(get_helpers_paginas());
        ValidacaoUtils::verificarLoginUtils($this->session);
        ValidacaoUtils::nivelTemAcessoPermitido($this->session->userdata('nivel'), $this->router->class);
        ValidacaoUtils::carregarModelsPagina($this->modelPagina, $this);
    }

    public function index() {
        $this->gerenciar();
    }

    public function gerenciar() {
        $config = DadosPaginas::layoutPaginacao('funcionario/gerenciar/', $this->funcionario_model->count(self::TABELA_BANCO_FUNCIONARIO), $this);
        $this->pagination->initialize($config);

        $this->data['results'] = $this->funcionario_model->get(self::TABELA_BANCO_FUNCIONARIO , '*', $this->whereFuncionario(), $config['per_page'], $this->uri->segment(3));
        $this->data['view'] = 'sistema/funcionario/listarFuncionarios';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function whereFuncionario() {
        $nomeFuncionario = preg_replace('/[`^~\'"]/', '', $this->input->get('nomeFuncionario'));
        $cpfFuncionario = preg_replace('/[`^~\'"]/', '', $this->input->get('cpfFuncionario'));
        if (!empty($nomeFuncionario)) {
            $this->db->like('nomeFuncionario', $nomeFuncionario);
        }
        if (empty($cpfFuncionario)) {
            $this->db->like('cpfFuncionario', $cpfFuncionario);
        }
    }

    public function adicionar() {
        $this->load->library(DadosPaginas::FORM_VALIDATION);
        $this->data['custom_error'] = '';

        if ($this->form_validation->run(self::TABELA_BANCO_FUNCIONARIO) == false) {
            $this->data['custom_error'] = (validation_errors() ? true : false);
        } else {
            $this->load->library('encrypt');
            $cpfSemMascara = $cpf = preg_replace("/\D+/", "", $this->input->post('cpfFuncionario'));
            $data = array(
                'dataEntrada' => ValidacaoUtils::validarData($this->input->post('dataEntrada')),
                'dataNascimento' => ValidacaoUtils::validarData($this->input->post('dataNascimento')),
                'dataProximaFerias' => ValidacaoUtils::validarData($this->input->post('dataProximaFerias')),
                'nomeFuncionario' => $this->input->post('nomeFuncionario'),
                'sobreNome' => $this->input->post('sobreNome'),
                'cpfFuncionario' => $cpfSemMascara,
                'rgFuncionario' => $this->input->post('rgFuncionario'),
                'orgaoEmissorRgFuncionario' => $this->input->post('orgaoEmissorRgFuncionario'),
                'matricula' => $this->input->post('matricula'),
                'funcao' => $this->input->post('funcao'),
                'endereco' => $this->input->post('endereco'),
                'bairro' => $this->input->post('bairro'),
                'cidade' => $this->input->post('cidade'),
                'uf' => $this->input->post('uf'),
                'cep' => $this->input->post('cep'),
                'telCelular' => $this->input->post('telCelular'),
                'telResidencial' => $this->input->post('telResidencial'),
                'telRecados' => $this->input->post('telRecados'),
                'jornada' => $this->input->post('jornada'),
                'situacao' => $this->input->post('situacao'),
                'grauInstrucao' => $this->input->post('grauInstrucao'),
                'sexo' => $this->input->post('sexo'),

                // Dados de Login
                'email' => $this->input->post('email'),
                'senha' => $this->encrypt->sha1($this->input->post('senha')),

                'estadoCivil' => $this->input->post('estadoCivil')

            );

            if (is_numeric($id = $this->funcionario_model->add(self::TABELA_BANCO_FUNCIONARIO, $data, true))) {
                $this->adicionarImagem($id, 'imagemFuncionario', $this->input->post('funcao'));
                $this->session->set_flashdata('success', 'Funcionario cadastrada com sucesso.');

            } else {
                $this->data['custom_error'] = '<div class="form_error"><p>Ocorreu um erro.</p></div>';
            }
            redirect('funcionario/gerenciar');
        }

        $this->data['view'] = 'sistema/funcionario/adicionarFuncionario';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function editar() {

        $this->load->library(DadosPaginas::FORM_VALIDATION);
        $this->data['custom_error'] = '';

        if ($this->form_validation->run(self::TABELA_BANCO_FUNCIONARIO) == false) {
            $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' . validation_errors() . '</div>' : false);
        } else {

            $this->load->library('encrypt');
            $cpfSemMascara = $cpf = preg_replace("/\D+/", "", $this->input->post('cpfFuncionario'));
            $data = array(
                'dataEntrada' => ValidacaoUtils::validarData($this->input->post('dataEntrada')),
                'dataNascimento' => ValidacaoUtils::validarData($this->input->post('dataNascimento')),
                'dataProximaFerias' => ValidacaoUtils::validarData($this->input->post('dataProximaFerias')),
                'nomeFuncionario' => $this->input->post('nomeFuncionario'),
                'sobreNome' => $this->input->post('sobreNome'),
                'cpfFuncionario' => $cpfSemMascara,
                'rgFuncionario' => $this->input->post('rgFuncionario'),
                'orgaoEmissorRgFuncionario' => $this->input->post('orgaoEmissorRgFuncionario'),
                'matricula' => $this->input->post('matricula'),
                'funcao' => $this->input->post('funcao'),
                'endereco' => $this->input->post('endereco'),
                'bairro' => $this->input->post('bairro'),
                'cidade' => $this->input->post('cidade'),
                'uf' => $this->input->post('uf'),
                'cep' => $this->input->post('cep'),
                'telCelular' => $this->input->post('telCelular'),
                'telResidencial' => $this->input->post('telResidencial'),
                'telRecados' => $this->input->post('telRecados'),
                'jornada' => $this->input->post('jornada'),
                'situacao' => $this->input->post('situacao'),
                'grauInstrucao' => $this->input->post('grauInstrucao'),
                'sexo' => $this->input->post('sexo'),

                // Dados de Login
                'email' => $this->input->post('email'),
                'senha' => $this->encrypt->sha1($this->input->post('senha')),

                'estadoCivil' => $this->input->post('estadoCivil')

            );

            if ($this->funcionario_model->edit(self::TABELA_BANCO_FUNCIONARIO, $data, 'idFuncionario', $this->input->post('idFuncionario')) == TRUE) {
                $this->session->set_flashdata('success', 'Funcionario editada com sucesso!');
                redirect(base_url() . 'funcionario/editar/' . $this->input->post('idFuncionario'));
            } else {
                $this->data['custom_error'] = '<div class="form_error"><p>Ocorreu um erro</p></div>';
            }
        }

        $this->data['result'] = $this->funcionario_model->getById($this->uri->segment(3));
        $this->data['view'] = 'sistema/funcionario/editarFuncionario';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);

    }

    public function visualizar() {
        $this->data['custom_error'] = '';
        $this->data['result'] = $this->funcionario_model->getById($this->uri->segment(3));

        $this->data['view'] = 'sistema/funcionario/visualizarFuncionario';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);

    }

    public function visualizarFichaCadastral() {
        $this->data['custom_error'] = '';
        $this->data['result'] = $this->funcionario_model->getById($this->uri->segment(3));

        $this->data['view'] = 'relatorios/fichaCadastral';

        $this->load->view('tema/topoRelatorios', $this->data);

    }

    public function excluir() {
        $id = $this->input->post('id');
        if ($id == null) {
            $this->session->set_flashdata('error', 'Erro ao tentar excluir Compromisso.');
            redirect('funcionario/gerenciar/');
        }

        $arquivoExcluir = 'imagensFuncionario/' . $this->input->post('arquivo') . '';
        if (unlink($arquivoExcluir)) {
            $this->session->set_flashdata('success', 'arquivo excluída com sucesso!');
        }


        $this->db->where('idFuncionario', $id);

        $this->db->delete(self::TABELA_BANCO_FUNCIONARIO);

        $this->session->set_flashdata('success', 'Funcionario excluída com sucesso!');
        redirect('funcionario/gerenciar/');

    }

    public function addImagemFuncionarioEditar() {
        $this->adicionarImagem($this->input->post('id'), 'imagemEditarCorpo', $this->input->post('categoriaEditarFoto'));
        redirect(base_url() . 'funcionario/editar/' . $this->input->post('id'));
    }

    public function addImagemFuncionarioVisualizar() {
        $this->adicionarImagem($this->input->post('id'), 'imagemEditarCorpo', $this->input->post('categoriaEditarFoto'));
        redirect(base_url() . 'funcionario/visualizar/' . $this->input->post('id'));
    }

    public function editarImagemFuncionarioEditar() {
        $this->editarImagem($this->input->post('id'), 'imagemEditarCorpo');
        redirect(base_url() . 'funcionario/editar/' . $this->input->post('id'));
    }

    public function autoCompleteFuncionario() {

        if (isset($_GET['term'])) {
            $q = strtolower($_GET['term']);
            $this->funcionario_model->autoCompleteFuncionario($q);
        }

    }

    private function adicionarImagem($id, $idImagemHTML, $categoriaImagem) {
        if (!empty($_FILES[$idImagemHTML]['name'])) {
            $dataFoto = GerenciarArquivos::salvarImagemPasta($id, $categoriaImagem,
                'funcionario_id', 'imagensFuncionario', $idImagemHTML);;
            return $this->funcionario_model->addFotos('imagemfuncionario', $dataFoto, true);
        }
    }

    private function editarImagem($id, $idImagem) {
        if (!empty($_FILES[$idImagem]['name'])) {
            $dataFoto = GerenciarArquivos::salvarImagemPasta($id, $this->input->post('categoriaEditarFoto'),
                'funcionario_id', 'imagensFuncionario', $idImagem);
            $this->excluirImagenAntiga($id);
            $this->funcionario_model->edit('imagemfuncionario', $dataFoto, 'IdImagemFuncionario', $this->input->post('idImagemBD'));
            $this->session->set_flashdata('success', 'Imagem editada com sucesso!');
        }
    }

    private function excluirImagenAntiga($id) {
        $arquivoExcluir = 'imagensFuncionario/' . $this->input->post('arquivo');
        if (unlink($arquivoExcluir)) {
            $this->session->set_flashdata('success', '');
        }
        $this->db->where('IdImagemFuncionario', $id);
        $this->db->delete('imagemfuncionario');
    }


}