<?php

// Propriedades [qtdbtn] =     Quantidade de botoes por linha, max 3

unset($_SESSION);
defined('BASEPATH') OR exit('No direct script access allowed');

class Principal extends CI_Controller
{

    function __construct()
    {
        parent::__construct();

        $this->load->model('Fila');
        $segmento_1 = $this->uri->segment(1);

        if ($segmento_1 != 'listaespera' && !isset($_SESSION['handleFila']) && !is_null($segmento_1)) {
            redirect(base_url(), 'location');
        }


    }

    public function index()
    {
        if ($_SESSION) {
            unset($_SESSION);
        }

        if (isset($_POST['fila']) && $_POST['fila'] == 'S') {
            #   SE A FILA NECESSITA DE BUSCA PELA DATA DE NASCIMENTO
            // Obtem os valores de POST para um array
            $sessionData = [
                'handleFila' => $_POST['handleFila'],
                'nomeFila' => $_POST['nomeFila'],
                'prioridadeFila' => $_POST['prioridadeFila'],
                'buscadnFila' => $_POST['fila']
            ];


            // Salva os dados do ARRAY da fila em uma SESSION
            $this->session->set_userdata($sessionData);

            $_SESSION['segmento'][0] = [
                'nome' => $_POST['nomeFila'],
                'link' => base_url()
            ];

            // Redireciona para a tela de pesquisa da fila (DATA DE NASCIMENTO)
            redirect('pesquisapacientefila', 'location');
        } elseif (isset($_POST['fila']) && $_POST['fila'] == 'N') {
            ## SE A FILA NÃO NECESSITA DE BUSCA PELA DATA DE NASCIMENTO
            // Obtem os valores de POST para um array
            $sessionData = [
                'handleFila' => $_POST['handleFila'],
                'nomeFila' => $_POST['nomeFila'],
                'prioridadeFila' => $_POST['prioridadeFila'],
                'buscadnFila' => $_POST['fila'],
                'dataNascimentoPaciente' => null
            ];
            // Salva os dados do ARRAY da fila em uma SESSION
            $this->session->set_userdata($sessionData);

            $_SESSION['segmento'][0] = [
                'nome' => $_POST['nomeFila'],
                'link' => base_url()
            ];

            // Redireciona para a tela de pesquisa da fila (DATA DE NASCIMENTO)
            redirect('incluipacientefila', 'location');
        }

        $this->session->sess_destroy();


        $data['title'] = "GK SENHAS";
        $data['hpaneltitle'] = "SELECIONE UMA FILA";

        $propriedades['filas'] = $this->Fila->getAllFila();
        $propriedades['qtdbtn'] = QUANTIDADE_FILA_LINHA;

        $this->load->view('header', $data);
        $this->load->view('principal', $propriedades);
        //$this->load->view('footer');
    }

    public function pesquisaPacienteFila()
    {

        if (isset($_SESSION['listaPaciente'])) {
            unset($_SESSION['listaPaciente']);
        }

        if (isset($_SESSION['listaAtendimentos'])) {
            unset($_SESSION['listaAtendimentos']);
        }

        if (isset($_SESSION['dataNascimentoPaciente'])) {
            unset($_SESSION['dataNascimentoPaciente']);
        }

        if (isset($_POST['PROXIMO'])) {
            $dataNascimento = $_POST['dnascimento'] . '.' . $_POST['mnascimento'] . '.' . $_POST['anascimento'];

            // Pesquisa os atendimentos que tenha a data de nascimento igual a requisição
            $propriedades['atendimentosPaciente'] = $this->Fila->getAtendimentoWhere([
                'DATANASCIMENTO' => $dataNascimento
            ]);

            //Valida se tem paciente diferente na busca
            $pacienteDiff = false;
            for ($i = 0; $i < count($propriedades['atendimentosPaciente']); $i++) {
                for ($j = 0; $j < count($propriedades['atendimentosPaciente']); $j++) {
                    if ($propriedades['atendimentosPaciente'][$i]->NOMEPACIENTE != $propriedades['atendimentosPaciente'][$j]->NOMEPACIENTE) {
                        $pacienteDiff = true;
                        break;
                    }
                }
            }

            if (empty($propriedades['atendimentosPaciente'])) {
                $pacientesClinica = $this->Fila->getPacientePorDataNascimento($dataNascimento);

                // Obtem os valores de POST para um array
                $sessionData = [
                    'dataNascimentoPaciente' => $dataNascimento
                ];
                // Salva os dados do ARRAY do paciente em uma SESSION
                $this->session->set_userdata($sessionData);

                /*
                 * Redireciona para tela de seleção do paciente da clínica (Se houver a data de nascimento)
                 * OU encaminha para inclusão da fila
                */
                count($pacientesClinica) > 1 ? redirect('listapacienteclinica', 'location') : redirect('incluipacientefila', 'location');

                // Redireciona para a tela de inclusão do paciente
            } elseif ($pacienteDiff) {

                $listaPaciente = array();
                foreach ($propriedades['atendimentosPaciente'] as $atendimentos) {
                    $nomePaciente = strtoupper($atendimentos->NOMEPACIENTE);

                    if (!array_key_exists($nomePaciente, $listaPaciente)) {
                        $listaPaciente[$nomePaciente] = $atendimentos;
                    }
                }

                // Obtem os valores de POST para um array
                $sessionData = [
                    'listaPaciente' => $listaPaciente,
                    'listaAtendimentos' => $propriedades['atendimentosPaciente'],
                    'dataNascimentoPaciente' => $dataNascimento
                ];
                // Salva os dados do ARRAY do paciente em uma SESSION
                $this->session->set_userdata($sessionData);

                redirect('listapacientefila', 'location');
            } else {

                if (count($propriedades['atendimentosPaciente']) == 1 && $propriedades['atendimentosPaciente'][0]->TIPOSERVICO == 'R') {
                    $this->somenteUmRetorno($propriedades);
                } else {
                    // Obtem os valores de POST para um array
                    $sessionData = [
                        'handlePaciente' => $propriedades['atendimentosPaciente'][0]->HANDLEPACIENTE,
                        'nomePaciente' => $propriedades['atendimentosPaciente'][0]->NOMEPACIENTE,
                        'dataNascimentoPaciente' => $dataNascimento,
                        'listaAtendimentosPaciente' => $propriedades['atendimentosPaciente']
                    ];

                    // Salva os dados do ARRAY do paciente em uma SESSION
                    $this->session->set_userdata($sessionData);

                    //Se não retornar mais do que um paciente na pesquisa
                    redirect('listapacienteexame', 'location');
                }
            }
        }

        $data['title'] = "GK SENHAS";
        $data['hpaneltitle'] = "INFORME SUA DATA DE NASCIMENTO";
        $this->load->view('header', $data);
        $this->load->view('header_nav');
        $this->load->view('pesquisaPacienteFila');
        //$this->load->view('footer');
    }

    public function listaPacienteClinica()
    {

        $dataNascimento = $_SESSION['dataNascimentoPaciente'];

        $propriedades['listapaciente'] = $this->Fila->getPacientePorDataNascimento($dataNascimento);
        if (isset($_POST['GERAR'])) {

            $senhaGerada = $this->Fila->geraSenha($_SESSION['handleFila'], $_SESSION['dataNascimentoPaciente'], $_POST['radioNomePaciente'], null);

            $propriedades['senhagerada'] = $senhaGerada;
        }

        $data['title'] = "GK SENHAS";
        $data['hpaneltitle'] = "SELECIONE SEU REGISTRO";
        $this->load->view('header', $data);
        $this->load->view('header_nav');
        $this->load->view('listaPacienteClinica', $propriedades);
        //$this->load->view('footer');
    }

    public function listaEspera()
    {
        $propriedades['listaPacienteEspera'] = $this->Fila->listaEspera();

        $data['title'] = "GK SENHAS";
        $data['hpaneltitle'] = "SELECIONE SEU REGISTRO";
        $this->load->view('header', $data);
        $this->load->view('listaEspera',$propriedades);
    }


    public function incluiPacienteFila()
    {

        $propriedades = [];
        if (isset($_POST['GERAR'])) {
            //Limpa o atendimento
            $this->session->unset_userdata([
                $_SESSION['listaAtendimentosPaciente'] = ''
            ]);

            $senhaGerada = $this->Fila->geraSenha($_SESSION['handleFila'], $_SESSION['dataNascimentoPaciente'], utf8_encode($_POST['nomePaciente']), null);

            $propriedades['senhagerada'] = $senhaGerada;
        }

        $data['title'] = "GK SENHAS";
        $data['hpaneltitle'] = "INFORME SEU NOME COMPLETO";

        $this->load->view('header', $data);
        $this->load->view('header_nav');
        $this->load->view('incluirPacienteFila', $propriedades);
        //$this->load->view('footer');
    }

    public function listaPacienteFila()
    {

        if (isset($_POST['PROXIMO'])) {

            $propriedades['atendimentosPaciente'] = array();

            foreach ($_SESSION['listaAtendimentos'] as $atendimentos) {
                if ($atendimentos->NOMEPACIENTE != $_POST['radioNomePaciente']) {
                    unset($atendimentos);
                } else {
                    $propriedades['atendimentosPaciente'][] = $atendimentos;
                }
            }

            if (count($propriedades['atendimentosPaciente']) == 1 && $propriedades['atendimentosPaciente'][0]->TIPOSERVICO == 'R') {
                #SE HOUVER SOMENTE RETORNO
                // Obtem os valores de POST para um array
                $sessionData = [
                    'handlePaciente' => $propriedades['atendimentosPaciente'][0]->HANDLEPACIENTE,
                    'nomePaciente' => $propriedades['atendimentosPaciente'][0]->NOMEPACIENTE,
                    'atendimentosPaciente' => $propriedades['atendimentosPaciente']
                ];
                // Salva os dados do ARRAY do paciente em uma SESSION
                $this->session->set_userdata($sessionData);


                $this->somenteUmRetorno($_SESSION);
            } else {
                // Obtem os valores de POST para um array
                $sessionData = [
                    'handlePaciente' => $propriedades['atendimentosPaciente'][0]->HANDLEPACIENTE,
                    'nomePaciente' => $propriedades['atendimentosPaciente'][0]->NOMEPACIENTE,
                    'listaAtendimentosPaciente' => $propriedades['atendimentosPaciente']
                ];
                // Salva os dados do ARRAY do paciente em uma SESSION
                $this->session->set_userdata($sessionData);

                redirect('listapacienteexame', 'location');
            }
        }

        $propriedades['listapaciente'] = $_SESSION['listaPaciente'];
        $data['title'] = "GK SENHAS";
        $data['hpaneltitle'] = "SELECIONE SEU NOME";

        $this->load->view('header', $data);
        $this->load->view('header_nav');
        $this->load->view('listaPacienteFila', $propriedades);
        //$this->load->view('footer');
    }

    public function listaPacienteExame()
    {

        if (isset($_POST['confirmaChegada'])) {

            $senhaGerada = $this->Fila->geraSenha($_SESSION['handleFila'], $_SESSION['dataNascimentoPaciente'], $_SESSION['nomePaciente'], $_SESSION['handlePaciente']);
            $propriedades['senhagerada'] = $senhaGerada;

            foreach ($_SESSION['listaAtendimentosPaciente'] as $atendimento) {
                $this->Fila->trocaSituacaoAtendimento($atendimento->HANDLE, $propriedades['senhagerada'][0]->HANDLESENHA);
            }
        }

        $data['title'] = "GK SENHAS";
        $data['hpaneltitle'] = "CONFIRME SUA PRESENÇA";

        $propriedades['handlepaciente'] = $_SESSION['handlePaciente'];
        $propriedades['nomepaciente'] = $_SESSION['nomePaciente'];
        $propriedades['listatendimentospaciente'] = $_SESSION['listaAtendimentosPaciente'];


        $this->load->view('header', $data);
        $this->load->view('header_nav');
        $this->load->view('listaPacienteExame', $propriedades);
        //$this->load->view('footer');
    }

    private function somenteUmRetorno($propriedades)
    {

        $dadosAtendimento = $propriedades['atendimentosPaciente'][0];

        $sessionData['retorno'] = true;

        if (SENHA_RETORNO == 'S') {
            $senhaGerada = $this->Fila->geraSenha($_SESSION['handleFila'], $dadosAtendimento->DATANASCIMENTO, $dadosAtendimento->NOMEPACIENTE, $dadosAtendimento->HANDLEPACIENTE);

            if (MENSAGEM_SENHA) {
                $sessionData['mensagemRetorno'] = MENSAGEM_SENHA;
            } else {
                $sessionData['mensagemRetorno'] = 'PRESENÇA CONFIRMADA COM SUCESSO <br> SUA SENHA É: ' . $senhaGerada[0]->NUMERO;
            }
        } else {
            $sessionData['mensagemRetorno'] = 'VOCÊ POSSUI UM RETORNO ' . $propriedades['atendimentosPaciente'][0]->LOCALIZACAO;
        }

        // Salva os dados do ARRAY do paciente em uma SESSION
        $this->session->set_userdata($sessionData);

        $this->Fila->trocaSituacaoAtendimentoRetorno($propriedades['atendimentosPaciente'][0]->HANDLE);
    }

}
