{=======================================}
{             RSC SISTEMAS              }
{        SOLUÇÕES TECNOLÓGICAS          }
{         rscsistemas.com.br            }
{          +55 92 4141-2737             }
{      contato@rscsistemas.com.br       }
{                                       }
{ Desenvolvidor por:                    }
{   Roniery Santos Cardoso              }
{     ronierys2@hotmail.com             }
{     +55 92 984391279                  }
{                                       }
{                                       }
{ Versão Original RSC SISTEMAS          }
{ Versão: 3.0.0                         }
{                                       }
{                                       }
{=======================================}

unit uConexaoApi;

interface

  uses
    System.IniFiles
    ,System.SysUtils
    ,System.UITypes

    ,Vcl.ExtCtrls

    ,REST.Client

    ,Rsc.Vcl.Dialogs

    ,uVariaveisGlobais
    ,uConstGlobais, REST.Types;




  procedure GetLerIniAPI;
  procedure SetGravarIniAPI;
  procedure SetGravarIniAPIConfigDefaut;

  procedure SetConfigConAPI(Sender: TObject);
  procedure SetRequestGetTimesTemp(Sender: TObject);
  procedure SetRequestGetMsgData(Sender: TObject);
  procedure SetRequestPostMsgData(Sender: TObject);


implementation

procedure GetLerIniAPI;
var
  ArquivoINI: TIniFile;
begin
  ArquivoINI := TIniFile.Create(ExtractFilePath(ParamStr(0))  + NomeArqIni);
  try
    try
      cid_      :=  ArquivoINI.ReadString(SessConexaoAPI, cid, EmptyStr);
      did_      :=  ArquivoINI.ReadString(SessConexaoAPI, did, EmptyStr);
      TempSync_ :=  ArquivoINI.ReadString(SessConexaoAPI, Tconf, EmptyStr);
      uuid_     :=  ArquivoINI.ReadString(SessConexaoAPI, uuid, EmptyStr);
      Monit_    :=  ArquivoINI.ReadBool(SessConexaoAPI, Monit, False);

//      ShowMessageRsc('Configurações carregadas com sucesso!');
    except on E: Exception do
      begin
        MessageDlgRsc('Erro ao carregar configurações de conexão da API do arquivo .ini', TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0);
      end;
    end;
  finally
    ArquivoINI.Free;
  end;
end;

procedure SetGravarIniAPI;
var
  ArquivoINI: TIniFile;
begin
  ArquivoINI  :=  nil;
  try
    try
      ArquivoINI := TIniFile.Create(ExtractFilePath(ParamStr(0))  + NomeArqIni);

      ArquivoINI.WriteString(SessConexaoAPI, cid, cid_);
      ArquivoINI.WriteString(SessConexaoAPI, did, did_);
      ArquivoINI.WriteString(SessConexaoAPI, Tconf, TempSync_);
      ArquivoINI.WriteString(SessConexaoAPI, uuid, uuid_);
      ArquivoINI.WriteBool(SessConexaoAPI, Monit, Monit_);

//      ShowMessageRsc('Configurações salvas com sucesso!');
    except on E: Exception do
      begin
        MessageDlgRsc('Erro ao salvar configurações de conexão a API no arquivo .ini', TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0);
      end;
    end;
  finally
    ArquivoINI.Free;
  end;
end;

procedure SetGravarIniAPIConfigDefaut;
var
  ArquivoINI: TIniFile;
begin
  ArquivoINI  :=  nil;
  try
    try
      ArquivoINI := TIniFile.Create(ExtractFilePath(ParamStr(0))  + NomeArqIni);

      ArquivoINI.WriteString(SessConexaoAPI, cid, 'princesa');
      ArquivoINI.WriteString(SessConexaoAPI, did, 'cfcnuvem.com.br');
      ArquivoINI.WriteString(SessConexaoAPI, Tconf, '30000');
      ArquivoINI.WriteString(SessConexaoAPI, uuid, 'teste');
      ArquivoINI.WriteBool(SessConexaoAPI, Monit, True);

//      ShowMessageRsc('Configurações salvas com sucesso!');  https://princesa.cfcnuvem.com.br/cbot/princesa.html
    except on E: Exception do
      begin
        MessageDlgRsc('Erro ao salvar configurações de conexão Defaut da API no arquivo .ini', TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0);
      end;
    end;
  finally
    ArquivoINI.Free;
  end;
end;

procedure SetConfigConAPI(Sender: TObject);
begin
  if Sender is TRESTClient then
  begin
    TRESTClient(Sender).BaseURL :=  Format('https://%s.%s/cbot/?', [cid_, did_]);
    Exit;
  end;

  if Sender is TTimer then
  begin
    TTimer(Sender).Interval :=  StrToUInt(TempSync_);
    TTimer(Sender).Enabled  :=  False;
    Exit;
  end;
end;

procedure SetRequestGetTimesTemp(Sender: TObject);
begin
  if Sender is TRESTRequest then
    begin
      TRESTRequest(Sender).Method :=  TRESTRequestMethod.rmGET;
      TRESTRequest(Sender).Resource :=  Format('%s.html', [cid_]);

      TRESTRequest(Sender).Params.Clear;
      TRESTRequest(Sender).Params.AddHeader('Authorization', 'Bearer ' + uuid_);
      TRESTRequest(Sender).Params.ParameterByName('Authorization').Options :=  [poDoNotEncode];
    end;
end;

procedure SetRequestGetMsgData(Sender: TObject);
begin
  if Sender is TRESTRequest then
    begin
      TRESTRequest(Sender).Method :=  TRESTRequestMethod.rmGET;
      TRESTRequest(Sender).Resource :=  EmptyStr;

      TRESTRequest(Sender).Params.Clear;
      TRESTRequest(Sender).Params.AddHeader('Authorization', 'Bearer ' + uuid_);
      TRESTRequest(Sender).Params.ParameterByName('Authorization').Options :=  [poDoNotEncode];
    end;
end;

procedure SetRequestPostMsgData(Sender: TObject);
begin
  if Sender is TRESTRequest then
    begin
      TRESTRequest(Sender).Method :=  TRESTRequestMethod.rmPOST;
      TRESTRequest(Sender).Resource :=  EmptyStr;

      TRESTRequest(Sender).Params.Clear;
      TRESTRequest(Sender).Params.AddHeader('Authorization', 'Bearer ' + uuid_);
      TRESTRequest(Sender).Params.ParameterByName('Authorization').Options :=  [poDoNotEncode];
    end;

end;

end.
