/*
         * Initializes the hospitals but does not add them to the map
         */
        public async Task InitialiseHospitalsWithoutAddingToMap()
        {
            ClinicianAPI clinicianApi = new ClinicianAPI();
            Tuple <HttpStatusCode, List <Hospital> > tuple = await clinicianApi.GetHospitals();

            switch (tuple.Item1)
            {
            case HttpStatusCode.OK:
                Console.WriteLine("Organ map hospitals retrieved successfully");
                hospitals = tuple.Item2;

                break;

            case HttpStatusCode.ServiceUnavailable:
                await DisplayAlert("",
                                   "Server unavailable, check connection",
                                   "OK");

                break;

            case HttpStatusCode.InternalServerError:
                await DisplayAlert("",
                                   "Server error retrieving hospitals, please try again (500)",
                                   "OK");

                break;
            }
        }
        private async Task InitialiseHospitals()
        {
            ClinicianAPI clinicianApi = new ClinicianAPI();
            Tuple <HttpStatusCode, List <Hospital> > tuple = await clinicianApi.GetHospitals();

            switch (tuple.Item1)
            {
            case HttpStatusCode.OK:
                Console.WriteLine("Organ map hospitals retrieved successfully");
                hospitals = tuple.Item2;

                foreach (Hospital currentHospital in hospitals)
                {
                    Console.WriteLine("Tracking positions");
                    Position finalPosition = new Position(currentHospital.latitude, currentHospital.longitude);

                    var pin = new CustomPin
                    {
                        CustomType = ODMSPinType.HOSPITAL,
                        Position   = finalPosition,
                        Label      = currentHospital.name,
                        Address    = currentHospital.address,
                    };

                    // We add to this list to track our pins with additional information (like hospital or donor)
                    customMap.CustomPins.Add(pin.Position, pin);

                    lock (customMap.Pins)
                    {
                        customMap.Pins.Add(pin);
                    }
                }

                break;

            case HttpStatusCode.ServiceUnavailable:
                await DisplayAlert("",
                                   "Server unavailable, check connection",
                                   "OK");

                break;

            case HttpStatusCode.InternalServerError:
                await DisplayAlert("",
                                   "Server error retrieving hospitals, please try again (500)",
                                   "OK");

                break;
            }
        }
        /*
         * Called when the Save button is pressed, reads + validates input fields and pushes changes to the API
         */
        private async void SaveClicked(object sender, EventArgs e)
        {
            Models.Clinician loggedInClinician = ClinicianController.Instance.LoggedInClinician;

            string name = InputValidation.Trim(NameInput.Text);

            string givenAddress = InputValidation.Trim(AddressInput.Text);
            string givenRegion  = InputValidation.Trim(RegionInput.Text);

            // Birth names
            if (!InputValidation.IsValidTextInput(name, false, false))
            {
                await DisplayAlert("", "Please enter a valid name", "OK");

                return;
            }

            // Address
            if (!InputValidation.IsValidTextInput(givenAddress, true, true))
            {
                await DisplayAlert("", "Please enter a valid address", "OK");

                return;
            }

            // Set user attributes to the new fields
            loggedInClinician.name = name;

            loggedInClinician.workAddress = givenAddress;
            loggedInClinician.region      = givenRegion;

            ClinicianAPI   clinicianAPI     = new ClinicianAPI();
            HttpStatusCode clinicianUpdated = await clinicianAPI.UpdateClinician();

            switch (clinicianUpdated)
            {
            case HttpStatusCode.Created:
                await DisplayAlert("",
                                   "Clinician details successfully updated",
                                   "OK");

                break;

            case HttpStatusCode.BadRequest:
                await DisplayAlert("",
                                   "Clinician details update failed (400)",
                                   "OK");

                break;

            case HttpStatusCode.ServiceUnavailable:
                await DisplayAlert("",
                                   "Server unavailable, check connection",
                                   "OK");

                break;

            case HttpStatusCode.Unauthorized:
                await DisplayAlert("",
                                   "Unauthorised to modify profile",
                                   "OK");

                break;

            case HttpStatusCode.InternalServerError:
                await DisplayAlert("",
                                   "Server error, please try again (500)",
                                   "OK");

                break;
            }
        }