<?php
session_start();
require("../../database/dbConection.php");

$usuarioLogado    = $_SESSION['idUsuarioLogado'];
$chaveConfirmacao = rand(10000000, 99999999);
$dataHoraRegistro = date('Y-m-d H:i');

$opcaoOrigem          = mb_strtoupper($_POST['opcaoOrigem']);
$idPaciente           = $_POST['idPaciente'];
$prazoRetirada        = $_POST['prazoRetirada'];
$tipoVagaOcupada      = mb_strtoupper($_POST['tipoVagaOcupada']);
$idGrupoProcedimento  = $_POST['idGrupoProcedimento'];
$idProcedimento       = $_POST['idProcedimento'];

if ($opcaoOrigem == "A-VS") {

  $idVaga     = $_POST['idVaga'];
  $idVagaSub  = $_POST['idVagaSub'];

  # -- pegar dados da agenda para armazenar
  $sqlAgendaSub = "SELECT concat(reg_tb_agenda_sub.ano_agenda,'-',lpad(reg_tb_agenda_sub.mes_agenda, 2, '0'),'-',lpad(reg_tb_agenda_sub.dia_agenda, 2, '0'))AS dataAtendimento,
  reg_tb_agenda_sub.horario_inicioagenda,
  reg_tb_agenda_sub.id_grupo_procedimento,
  reg_tb_agenda_sub.id_procedimento,
  reg_tb_agenda_sub.quantidadegendada_pvez,
  reg_tb_agenda_sub.quantidadeagendada_retorno,
  reg_tb_agenda_sub.quantidadeagendada_reserva,
  reg_tb_agenda.codigoestabelecimento_cnes,
  reg_tb_agenda.codigoprofissional_cnes
  FROM reg_tb_agenda_sub
  INNER JOIN reg_tb_agenda ON (reg_tb_agenda_sub.id_agenda = reg_tb_agenda.id_agenda)
  WHERE reg_tb_agenda_sub.id_agenda_sub = '$idVagaSub'";
  $stmAgendaSub = $rsConexao->prepare($sqlAgendaSub);
  $stmAgendaSub->execute();
  $rsAgendaSub  = $stmAgendaSub->fetch(PDO::FETCH_OBJ);

  $dataAtendimento      = $rsAgendaSub->dataAtendimento;
  $horaAtendimento      = $rsAgendaSub->horario_inicioagenda;
  $estabelecimentoSaude = $rsAgendaSub->codigoestabelecimento_cnes;
  $profissionalSaude    = $rsAgendaSub->codigoprofissional_cnes;

  if ($tipoVagaOcupada == "PVEZ") {
    $calculaVagasOcupadas         = $rsAgendaSub->quantidadegendada_pvez;
    $variavelAtualizaVagaOcupada  = 'quantidadegendada_pvez';
  } else if ($tipoVagaOcupada     == "RETORNO") {
    $calculaVagasOcupadas         = $rsAgendaSub->quantidadeagendada_retorno;
    $variavelAtualizaVagaOcupada  = 'quantidadeagendada_retorno';
  } else {
    $calculaVagasOcupadas         = $rsAgendaSub->quantidadeagendada_reserva;
    $variavelAtualizaVagaOcupada  = 'quantidadeagendada_reserva';
  }
} else {
  $idVaga           = null;
  $idVagaSub        = null;
  $dataAtendimento  = $_POST['dataAtendimento'];
  $horaAtendimento  = $_POST['horaAtendimento'];
}


function getIPCliente() {
  $ipaddress = '';
  if (getenv('HTTP_CLIENT_IP'))
      $ipaddress = getenv('HTTP_CLIENT_IP');
  else if(getenv('HTTP_X_FORWARDED_FOR'))
      $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
  else if(getenv('HTTP_X_FORWARDED'))
      $ipaddress = getenv('HTTP_X_FORWARDED');
  else if(getenv('HTTP_FORWARDED_FOR'))
      $ipaddress = getenv('HTTP_FORWARDED_FOR');
  else if(getenv('HTTP_FORWARDED'))
     $ipaddress = getenv('HTTP_FORWARDED');
  else if(getenv('REMOTE_ADDR'))
      $ipaddress = getenv('REMOTE_ADDR');
  else
      $ipaddress = 'UNKNOWN';

  return $ipaddress;
}
$ipUsuarioAgendou       = getIPCliente();
$conexaoUsuarioAgendou  = gethostbyaddr(getIPCliente());

$sqlGravarAgendamento = "INSERT INTO reg_tb_agendamentos(
    origem_agendamento,
    id_paciente,
    id_agenda,
    id_agenda_sub,
    id_grupo_procedimento,
    id_procedimento,
    data_atendimento,
    horario_atendimento,
    dataprazo_retirada,  
    tipo_vagaocupada,
    chave_confirmacao,
    encaminhado_ligacao,
    em_comunicacao,
    id_usuario_agendou,
    ip_usuario_agendou,
    conexao_usuario_agendou
  )VALUES(
    :setOrigemAgendamento,
    :setIdPaciente,
    :setIdAgenda,
    :setIdAgendaSub,
    :setIdGrupoProcedimento,
    :setIdProcedimento,
    :setDataAtendimento,
    :setHorarioAtendimento,
    :setDataPrazoRetirada,
    :setTipoVagaOcupada,
    :setChaveConfirmacao,
    :setEmLigacao,
    :setEmComunicacao,
    :setIdUsuarioAgendou,
    :setIPUsuarioAgendou,
    :setConexaoUsuarioAgendou
  )";

$emLigacao            = "S";
$emComunicacao        = "N";
$stmGravarAgendamento = $rsConexao->prepare($sqlGravarAgendamento);
$stmGravarAgendamento->bindParam(":setOrigemAgendamento", $opcaoOrigem, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setIdPaciente", $idPaciente, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setIdAgenda", $idVaga, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setIdAgendaSub", $idVagaSub, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setIdGrupoProcedimento", $idGrupoProcedimento, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setIdProcedimento", $idProcedimento, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setDataAtendimento", $dataAtendimento, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setHorarioAtendimento", $horaAtendimento, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setDataPrazoRetirada", $prazoRetirada, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setTipoVagaOcupada", $tipoVagaOcupada, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setChaveConfirmacao", $chaveConfirmacao, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setEmLigacao", $emLigacao, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setEmComunicacao", $emComunicacao, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setIdUsuarioAgendou", $usuarioLogado, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setIPUsuarioAgendou", $ipUsuarioAgendou, PDO::PARAM_STR);
$stmGravarAgendamento->bindParam(":setConexaoUsuarioAgendou", $conexaoUsuarioAgendou, PDO::PARAM_STR);
$stmGravarAgendamento->execute();
$idAgendamento       = $rsConexao->lastInsertId();
$_SESSION['idAgendamento']  = $idAgendamento;

# -- atualizar número protocolo de agendamento -- #
$sqlProtocoloSolicitacao = "SELECT id_solicitacao,numero_procotolo
FROM reg_tb_solicitacoes
WHERE (id_paciente='$idPaciente') 
AND (id_procedimento='$idProcedimento') 
AND (id_statussolicitacao='2')";
$stmProtocoloSolicitacao = $rsConexao->prepare($sqlProtocoloSolicitacao);
$stmProtocoloSolicitacao ->execute();
if($stmProtocoloSolicitacao->rowCount()>0){
  $rsProtocoloSolicitacao = $stmProtocoloSolicitacao->fetch(PDO::FETCH_OBJ);
  $idSolicitacaoAgendamento = $rsProtocoloSolicitacao->id_solicitacao;
  $protSolicitacaoAgendamento = $rsProtocoloSolicitacao->numero_procotolo;
  $sqlUpdateAgendamento = "UPDATE reg_tb_agendamentos SET 
  id_solicitacao='$idSolicitacaoAgendamento',
  protocolo_agendamento='$protSolicitacaoAgendamento'
  WHERE (id_agendamento='$idAgendamento')";
}else{
  $protocoloAgendamento = date("Ym") . str_pad($idAgendamento, 4, "0", STR_PAD_LEFT);
  $sqlUpdateAgendamento = "UPDATE reg_tb_agendamentos SET protocolo_agendamento='$protocoloAgendamento' WHERE id_agendamento='$idAgendamento'";
}
$stmAtualizaProtocolo = $rsConexao->prepare($sqlUpdateAgendamento);
$stmAtualizaProtocolo->execute();
# ------------------------------------------------#

if ($opcaoOrigem == "A-VS") {
  $calculaSaldoVaga = $calculaVagasOcupadas + 1;
  $stmAtualizaVagaOcupada = $rsConexao->prepare("UPDATE reg_tb_agenda_sub SET $variavelAtualizaVagaOcupada='$calculaSaldoVaga' WHERE id_agenda_sub='$idVagaSub'");
  $stmAtualizaVagaOcupada->execute();
} else {
  $chaveAgendamento = $_SESSION['chaveAgendamento-DOC'];
  $stmAtualizaDOC   = $rsConexao->prepare("UPDATE reg_tb_solicitacoes_agendado SET id_agendamento_direto='$idAgendamento' WHERE chave_agendamento='$chaveAgendamento'");
  $stmAtualizaDOC->execute();
}
# ----------------------------------- #

# -- atualizar como agendada a solicitação do mesmo paciente do mesmo procedimento -- #

$sqlAtualizaSolicitacao = "UPDATE reg_tb_solicitacoes 
SET id_statussolicitacao='6',
datahora_registroagendamento='$dataHoraRegistro',
data_atendimento='$dataAtendimento',
idusuario_registrouagendamento='$usuarioLogado'
WHERE (id_paciente='$idPaciente') 
AND (id_procedimento='$idProcedimento') 
AND (id_statussolicitacao='2')";
$stmAtualizaSolicitacao = $rsConexao->prepare($sqlAtualizaSolicitacao);
$stmAtualizaSolicitacao ->execute();

# ------------------------------------------------#

# -- atualizar telefones do paciente -- #
$telefoneCelular1          = $_POST['telefoneCelular1'];
$telefoneCelular2          = $_POST['telefoneCelular2'];
$telefoneCelular3          = $_POST['telefoneCelular3'];
$telefoneCelular1Whatsapp  = $_POST['telefoneCelular1Whatsapp'];
$telefoneCelular2Whatsapp  = $_POST['telefoneCelular2Whatsapp'];
$telefoneCelular3Whatsapp  = $_POST['telefoneCelular3Whatsapp'];

$sqlPaciente = "UPDATE tb_paciente SET
celular1=:setCelular1,
celular2=:setCelular2,
celular3=:setCelular3,
celular1_whatsapp=:setWhatsApp1,
celular2_whatsapp=:setWhatsApp2,
celular3_whatsapp=:setWhatsApp3
WHERE id_paciente='$idPaciente'";
$stmPaciente  = $rsConexao->prepare($sqlPaciente);
$stmPaciente->bindParam(":setCelular1", $telefoneCelular1, PDO::PARAM_STR);
$stmPaciente->bindParam(":setCelular2", $telefoneCelular2, PDO::PARAM_STR);
$stmPaciente->bindParam(":setCelular3", $telefoneCelular3, PDO::PARAM_STR);
$stmPaciente->bindParam(":setWhatsApp1", $telefoneCelular1Whatsapp, PDO::PARAM_STR);
$stmPaciente->bindParam(":setWhatsApp2", $telefoneCelular2Whatsapp, PDO::PARAM_STR);
$stmPaciente->bindParam(":setWhatsApp3", $telefoneCelular3Whatsapp, PDO::PARAM_STR);
$stmPaciente->execute();
# ------------------------------------- #

if($_SESSION['idPerfilLogado']=='1' || $_SESSION['idPerfilLogado']=='14'){
  
  $nomeUsuarioLogado = $_SESSION['nomeUsuarioLogado'];
  $sqlAtualizaEntrega = "UPDATE reg_tb_agendamentos SET
  status_agendamento='E',
  marcacao_entregue='S',
  id_usuario_entregou='$usuarioLogado',
  datahora_entrega='$dataHoraRegistro',
  documento_portador='id do Usuario=$usuarioLogado',
  telefone_portador='id do Usuario=$usuarioLogado',
  observacoes_entrega='AGENDAMENTO DIRETO - ENTREGUE NA HORA'
  WHERE id_agendamento='$idAgendamento'";
  $stmAtualizaEntrega = $rsConexao->prepare($sqlAtualizaEntrega);
  $stmAtualizaEntrega->execute();

}

# -- Se o agendamento for de paciente de OCI -- #
$agendamentoOCI = $_POST['agendamentoOCI'];

if($agendamentoOCI!="N"){
  $explodeDadosOCI = explode("##",$_POST['agendamentoOCI']);
  $idSolicitacao = $explodeDadosOCI[0];
  $idProcedimentoOCI = $explodeDadosOCI[1];
  $idProcedimentoAssociado = $explodeDadosOCI[2];
  $dataAgendou = date("Y-m-d");
  # -- Verificar se a OCI já foi iniciar com atendimento
  $sqlOCIIniciada = "SELECT id_agendamento_oci FROM reg_tb_agendamentos_oci 
  WHERE (id_paciente='$idPaciente') AND (id_solicitacao='$idSolicitacao') AND (id_procedimento_oci='$idProcedimentoOCI')";
  $stmOCIIniciada = $rsConexao->prepare($sqlOCIIniciada);
  $stmOCIIniciada->execute();
  if ($stmOCIIniciada->rowCount() > 0) {
    $sqlAtualizaAgendamentoOCI = "UPDATE reg_tb_agendamentos_oci
    SET data_atendimento='$dataAtendimento',
    id_quemagendou='$usuarioLogado',
    id_registro_agendamento='$idAgendamento',
    data_agendou='$dataAgendou',
    status_agendamento='AGENDADO'
    WHERE (id_paciente='$idPaciente') 
    AND (id_solicitacao='$idSolicitacao') 
    AND (id_procedimento_oci='$idProcedimentoOCI')
    AND (id_procedimento_associado='$idProcedimentoAssociado')";
    
    $stmAtualizaAgendamentoOCI = $rsConexao->prepare($sqlAtualizaAgendamentoOCI);
    $stmAtualizaAgendamentoOCI ->execute();    

    # -- Atualiza status exames de laboratório
    $stmCodigoSUSColeta = $rsConexao->prepare("SELECT codigo_sus FROM reg_tb_procedimento WHERE id_procedimento='$idProcedimentoAssociado'");
    $stmCodigoSUSColeta ->execute();
    $rsCodigoSUSColeta  = $stmCodigoSUSColeta->fetch(PDO::FETCH_OBJ);
    if($rsCodigoSUSColeta->codigo_sus=="0201020041"){
      $sqlAtualizaLab = "UPDATE reg_tb_procedimento 
      INNER JOIN reg_tb_agendamentos_oci ON reg_tb_procedimento.id_procedimento = reg_tb_agendamentos_oci.id_procedimento_associado
      SET status_agendamento='AGENDADO'     
      WHERE (reg_tb_procedimento.codigo_sus LIKE '0202%')
      AND (id_solicitacao='$idSolicitacao') 
      AND (id_procedimento_oci='$idProcedimentoOCI')";
      $stmAtualizaLab = $rsConexao->prepare($sqlAtualizaLab);
      $stmAtualizaLab ->execute();
    }

  } else {
    $sqlAtualizaAgendamentoOCI = "INSERT INTO reg_tb_agendamentos_oci(
      id_paciente,
      id_solicitacao,
      id_procedimento_oci,
      id_procedimento_associado,
      status_agendamento
    )
    SELECT '$idPaciente' AS id_paciente,
    '$idSolicitacao' AS id_solicitacao,
    reg_tb_procedimentos_oci.id_procedimento_oci,
    reg_tb_procedimentos_oci.id_procedimento_associado,
    'PENDENTE' AS status_agendamento
    FROM reg_tb_procedimentos_oci
    WHERE (id_procedimento_oci='$idProcedimentoOCI')";
    
    $stmAtualizaAgendamentoOCI = $rsConexao->prepare($sqlAtualizaAgendamentoOCI);
    $stmAtualizaAgendamentoOCI ->execute();

    $sqlAtualizaAgendado = "UPDATE reg_tb_agendamentos_oci
    SET data_atendimento='$dataAtendimento',
    id_quemagendou='$usuarioLogado',
    id_registro_agendamento='$idAgendamento',
    data_agendou='$dataAgendou',
    status_agendamento='AGENDADO',
    data_primeiro_agendamento='$dataAgendou'
    WHERE (id_paciente='$idPaciente') 
    AND (id_solicitacao='$idSolicitacao') 
    AND (id_procedimento_oci='$idProcedimentoOCI')
    AND (id_procedimento_associado='$idProcedimentoAssociado')";     
    $sqlAtualizaAgendado = $rsConexao->prepare($sqlAtualizaAgendado);
    $sqlAtualizaAgendado ->execute();
    
    # - Atualizar status de OCI que está na fila
    $sqlAtualizarStatusOCIFila = "UPDATE reg_tb_solicitacoes 
    SET observacao_agendamento='Agendameto realizado pelo NGC',
    datahora_registroagendamento='$dataHoraRegistro',
    idusuario_registrouagendamento='$usuarioLogado',
    data_atendimento='$dataAtendimento',
    id_statussolicitacao='6',
    status_agendamento='E'
    WHERE id_solicitacao='$idSolicitacao'";
    $stmAtualizarStatusOCIFila = $rsConexao->prepare($sqlAtualizarStatusOCIFila);
    $stmAtualizarStatusOCIFila ->execute();
  }
  # -- atualizar id solicitação no agendamento em caso de OCI
  $stmUpdateAgendamentoOCI = $rsConexao->prepare("UPDATE reg_tb_agendamentos SET id_solicitacao='$idSolicitacao' WHERE (id_agendamento='$idAgendamento')");
  $stmUpdateAgendamentoOCI ->execute();
}
  # --------------------------------------------- #
echo $protocoloAgendamento;
$_SESSION['origemAgendamento']=$opcaoOrigem;

?>