<?php
// ************************************************************************
// * Este módulo cuida da identificação e autorização do terminal desktop *
// ************************************************************************
//
//
// -- Autorização do terminal --
// Comando: SRV_IDN.TERMINAL
Function Act_TERMINAL() {
  Global $aGlobal;
  $nCodig_Empresa = @$aGlobal->aDados_Recebidos['CODIGO_EMPRESA']+0;
  $sChave_Empresa = @$aGlobal->aDados_Recebidos['CHAVE_EMPRESA'];
  $sTrm_Id_Device = @$aGlobal->aDados_Recebidos['Terminal_Id'];
  //
  // Conferir dados obrigatórios
  If ( $nCodig_Empresa < 1 OR EMPTY($sChave_Empresa) OR EMPTY($sTrm_Id_Device) ) {
    $aGlobal->Reportar_Erro( 150 );              // ** ERRO: Faltando dados obrigatorios
    return;
  }
  // Conferir se a empresa possui o aplicativo no seu cadastro no Simdesk
  If ( ! $aGlobal->Capturar_Dados_Empresa_Simdesk( $nCodig_Empresa, $sChave_Empresa ) ) {
    $aGlobal->Reportar_Erro( $aGlobal->nCaptura_Emp_Err );      // ** ERRO: Empresa sem acesso ao serviço desta API
    return;
  }
  //
  $aReg_Terminal = P_SQL_Reg_Terminais( $aGlobal->nSim_Emp_CodigoI, 0, $sTrm_Id_Device );
  $aReg_Terminal = @$aReg_Terminal[0];
  $nTrm_CodigoInt = @$aReg_Terminal['TRM_CODIGOINT']+0;
  $nTrm_Num_Tipo_ = @$aReg_Terminal['TRM_NUM_TIPO_']+0;
  $dTrm_DtHr_Atrz = ConvertDtHrSTR(@$aReg_Terminal['TRM_DTHR_ATRZ']);
  //
  If ( $nTrm_CodigoInt > 0 && $nTrm_Num_Tipo_ != 1 ) {
    $aGlobal->Reportar_Erro( 151 );              // ** ERRO: O tipo do terminal é incompatível com a operação
    return;
  }
  //
  If ( $nTrm_CodigoInt==0 ) {       // Registrar terminal
    $sSQLQuery =
     'INSERT INTO '.
       'reg_terminal '.
     '('.
       'TRM_CODIGOSIM, TRM_ID_INDICE, TRM_DTHR_REGS, TRM_ACESSO_IP, TRM_NUM_TIPO_'.
     ') VALUE ('.
       $aGlobal->nSim_Emp_CodigoI.',"'.$sTrm_Id_Device.'", NOW(), '.SQL_Bin( Converter_IPv4($aGlobal->sNumeroIP_Remoto,0) ).',1'.
     ');';
    SQL_Query( $sSQLQuery );
    $nTrm_CodigoInt = SQL_Insert_Id();
  }
  // Atualizar o rótulo no terminal
  If ( ISSET($aGlobal->aDados_Recebidos['Terminal_Rotulo']) ) {
    $sTrm_Dc_Rotulo = $aGlobal->aDados_Recebidos['Terminal_Rotulo'];
    $sSQLQuery =
      'UPDATE '.
        'reg_terminal '.
      'SET '.
        'TRM_DC_ROTULO = "'.$sTrm_Dc_Rotulo.'" '.
      'WHERE TRM_CODIGOINT='.$nTrm_CodigoInt.' '.
      ';';
    SQL_Query( $sSQLQuery );
    $aReg_Terminal['TRM_DC_ROTULO'] = $sTrm_Dc_Rotulo;
  }
  //
  If ( $dTrm_DtHr_Atrz > 0 ) {      // Terminal autorizado
    $sTrm_Ses_Chave = GeraChave( 16 );
    // Gravar a chave gerada
    $sSQLQuery =
      'UPDATE '.
        'reg_terminal '.
      'SET '.
        'TRM_SES_CHAVE = "'.$sTrm_Ses_Chave.'",'.
        'TRM_ACESSO_IP = '.SQL_Bin( Converter_IPv4($aGlobal->sNumeroIP_Remoto,0) ).','.
        'TRM_ACESSO_DH = NOW() '.
      'WHERE TRM_CODIGOINT='.$nTrm_CodigoInt.' '.
      ';';
    SQL_Query( $sSQLQuery );
    // 
    $aGlobal->aRetornoMod_JSon =
      [ 'Autorizado'      => True ,
        'Terminal_Codigo' => $nTrm_CodigoInt,
        'Chave_Sessao'    => $sTrm_Ses_Chave,
        'Empresa'         =>
          [ 'Nome'     => $aGlobal->aSim_Cad_Empresa['CLI_FANTAS'],
            'Telefone' => $aGlobal->aSim_Cad_Empresa['CLI_TEL_01'],
            'Endereco' => $aGlobal->aSim_Cad_Empresa['CLI_ENDERE']
          ]
      ];
    // Gravar atividade
    If ( $nTrm_CodigoInt > 0 ) {
      $aReg_Terminal = P_SQL_Reg_Terminais( $aGlobal->nSim_Emp_CodigoI, $nTrm_CodigoInt );
      $aReg_Terminal = @$aReg_Terminal[0];
      $aGlobal->aSessao_Terminal =
        [ 'Trm_Id_Device'   =>  @$aReg_Terminal['TRM_ID_INDICE'],
          'Trm_Nome_Rotulo' =>  @$aReg_Terminal['TRM_DC_ROTULO'],
          'Trm_CodigoInt'   =>  @$aReg_Terminal['TRM_CODIGOINT'],
          'Trm_CodigoAtv'   => (@$aReg_Terminal['TRM_CODIGOATV']+0)
        ];
      $a_Dados_Remoto = @$aGlobal->aDados_Recebidos['Dados_Remoto'];
      G_SQL_Simdesk_AplAtv( 1, @$a_Dados_Remoto['Data_Hora'], @$a_Dados_Remoto['Nome_Versao_OS'], @$a_Dados_Remoto['Versao_App'] );
    }
    //
    return;
  }
  // Terminal não autorizado
  $aGlobal->aRetornoMod_JSon =
    [ 'Autorizado'      => False,
      'Terminal_Codigo' => $nTrm_CodigoInt,
      'Terminal_Rotulo' => @$aReg_Terminal['TRM_DC_ROTULO']
    ];
  //
}
//
//
?>