public async void Register(object sender, EventArgs e)
		{
			

				WebService conn = new WebService();

				Login lg = (Login)BindingContext;

				Login toSend = new Login();
				toSend.Email = lg.Email;
				toSend.Username = lg.Username;
				
				//Encrypt password with and Update Login Object to send on webservice
				var salt = Crypto.CreateSalt(64);
				var encrypted = Crypto.EncryptToSend(lg.Password,salt);
				toSend.Password = encrypted;


				var response =  await conn.PerformRegister (toSend,salt);
				if(response != null)
				{
					var dataReceived = response[0];
					if(dataReceived.result.Equals("True")){
						await DisplayAlert("Successfull", "Registration Complete.","OK");
						await Navigation.PopAsync();
					}
					else{
						await DisplayAlert("Error", dataReceived.error,"OK");
					}
				}

			}
		public  async void ListView_Refreshing (object sender, EventArgs e)
		{
			WebService conn = new WebService ();
			var dbUpdated =  await conn.GetData(App.Current.Properties["key"] as string);
			DependencyService.Get<ISQLite>().OverrideDatabase(dbUpdated[0].data);
			listView.ItemsSource = App.Database.GetBets ();
			listView.EndRefresh ();
		}
		//Here you will receive all push notification messages
		//Messages arrives as a dictionary, the device type is also sent in order to check specific keys correctly depending on the platform.
		public async void OnMessage(IDictionary<string, object> Parameters, DeviceType deviceType)
		{
			Debug.WriteLine("Message Arrived");
			//UPDATE ALL BETS FROM CLOUD
			WebService conn = new WebService ();
			var dbUpdated =  await conn.GetData(App.Current.Properties["key"] as string);
			DependencyService.Get<ISQLite>().OverrideDatabase(dbUpdated[0].data);
			Debug.WriteLine("Data UPDATED");

			IEnumerable<Bet> allBets = App.Database.GetBets ().ToList ();
			List<Dictionary<string, dynamic>> rep2 = null;
	
			rep2 = await conn.GetResults (App.Current.Properties ["key"] as string);
			var msg  = JsonConvert.DeserializeObject<HelperAPI>(rep2[0]["drawn"]);

			Bet Sorteio = new Bet ();

			//Parse string[] to string
			string numbersFinal = "";
			string starsFinal = "";
			int counter = 0;
			foreach (string n in msg.numbers)
			{
				if (counter != 4) {
					numbersFinal += n + "-";
				} else {
					numbersFinal += n;
				}
			}
			counter = 0;
			foreach (string s in msg.stars)
			{
				if (counter != 1) {
					starsFinal += s + "-";
				} else {
					starsFinal += s;
				}
			}
			Sorteio.Numbers = numbersFinal;
			Sorteio.Stars = starsFinal;
			Sorteio.Date = DateTime.Now.ToString ();



			BetResult BetRes = new BetResult ();
			foreach (Bet b in allBets)
			{
				//Consoante resultado da funcao checkPrize();
				if (b.Status.Equals("WAIT"))
					{
					//Consoante resultado da funcao checkPrize();
					if (BetRes.checkPrize (b, Sorteio)) {
						b.Status = "WIN";
					} else {
						b.Status = "LOSS";
					}

					App.Database.SaveBet (b);
					}
			}


		}
		public async void Login(object sender, EventArgs e)
		{
			try
			{
				WebService conn = new WebService();
				Login lg = (Login)BindingContext;

				Login toSend = new Login();
				toSend.Email = lg.Email;
				toSend.Username = lg.Username;

				var saltResponse = await conn.GetSalt(lg.Username);

				byte[] userSalt = null;
				if(saltResponse != null)
				{
					var saltData = saltResponse[0];


					if(saltData.salt != null){
						//Workaround - decoder for b64
						string r1 = saltData.salt.Replace('-','+');
						string r2 = r1.Replace('_','/');
						string finalB64 = r2.Replace(',','=');

						userSalt = System.Convert.FromBase64String(finalB64);
						
					}
					else{
						await DisplayAlert("Error", "This username does not exist","OK");
					}
				}
				else{
					await DisplayAlert("Error", "This username does not exist", "OK");
				}
				//Encrypt password with and Update Login Object to send on webservice

				toSend.Password = Crypto.EncryptToSend(lg.Password, userSalt);



				var response =  await conn.PerformLogin (toSend);

				if(response != null)
				{
					var dataReceived = response[0];


					if(dataReceived.result.Equals("True")){
						App.Current.Properties["key"] = dataReceived.key;

						var userID = await conn.GetID(dataReceived.key,toSend.Username);
						if(userID[0].id != null){
							App.Current.Properties["id"] = userID[0].id as string;
						}

						var pushToken =  conn.SendToken(Application.Current.Properties ["key"] as string,Application.Current.Properties ["token"] as string);

							

						App.Current.MainPage = new Homepage();
					}
					else{
						await DisplayAlert("Error", "Invalid Login/Password","OK");
					}
				}

			}
			catch (Exception exc)
			{
				DisplayAlert("Error",exc.Message,"OK");
			}
		}
		async void Btn2_Clicked (object sender, EventArgs e)
		{	try{
				
				WebService conn = new WebService ();
				string token = Application.Current.Properties ["key"] as string;


				var response =  await conn.RequestOCR (imgByte,token);


				if(response != null)
				{
					var dataReceived = response[0];	
					if(dataReceived.result.Equals("True")){
						await DisplayAlert("Message", "Your photo has been sucessfully sent","OK");
						bool _done = false;
						List<Dictionary<string, dynamic>> rep2 = null;
						await App.Sleep(2000);
						while(!_done){
							rep2 = await conn.GetTicket(token, dataReceived.request);
							var responseResult = rep2[0]["result"];
							if(!responseResult.Equals("WAIT"))
							{
								_done = true;
							}
							else
							{
								await App.Sleep(1000);
							}
						}
						var combinationResult = rep2[0]["response"];
						var msg  = JsonConvert.DeserializeObject<HelperAPI>(rep2[0]["response"]);
						await conn.DeleteTicket(token, dataReceived.request);
						if(rep2[0]["result"])
						{
							await DisplayAlert("Message", "Ticket Received","OK");
							//Move to AddPage
							var BetObject = new Bet();
							var BetPage = new BetPage();
							BetObject.Date = DateTime.Now.ToString ();
							//Parse string[] to string
							string numbersFinal = "";
							string starsFinal = "";
							int counter = 0;
							foreach (string n in msg.numbers)
							{
								if(counter != 4){
									numbersFinal +=n+"-";
								}
								else {numbersFinal +=n;
								}
							}
							counter = 0;
							foreach (string s in msg.stars)
							{
								if(counter != 1){
									starsFinal +=s+"-";
								}else{
								starsFinal +=s;
								}
							}
							BetObject.Numbers = numbersFinal;
							BetObject.Stars = starsFinal;
							BetPage.BindingContext = BetObject;
							Navigation.PushAsync(BetPage);


						}
						else{
							await DisplayAlert("Message", "Some error ocurred" ,"OK");
						}

					}
					else{
						await DisplayAlert("Error", "Deu merda amigo","OK");
					}
				}



			}
			catch(Exception exc){
				DisplayAlert("Error",exc.Message,"OK");
			}

		}