public async Task <IActionResult> Index()
        {
            ViewData["NumberOfPatients"] = await PatientReservoir.GetNumberOfPatientsAsync();

            List <string> patients = await PatientReservoir.GetPatients(10);

            ViewData["PatientsInList"] = patients.Count;
            return(View(patients));
        }
        public async Task <IActionResult> PushBundle(string bundleFileName)
        {
            string bundleJson = await PatientReservoir.GetFhirBundleAndDelete(bundleFileName);

            if (!String.IsNullOrEmpty(bundleJson))
            {
                JObject o = JObject.Parse(bundleJson);

                JArray entries = (JArray)o["entry"];

                var client = new HttpClient();
                client.BaseAddress = new Uri(Configuration["FhirServerUrl"]);
                client.DefaultRequestHeaders.Add("x-ms-consistency-level", "Eventual");

                for (int i = 0; i < entries.Count; i++)
                {
                    string entry_json    = (((JObject)entries[i])["resource"]).ToString();
                    string resource_type = (string)(((JObject)entries[i])["resource"]["resourceType"]);
                    string id            = (string)(((JObject)entries[i])["resource"]["id"]);

                    //Rewrite subject reference
                    if (((JObject)entries[i])["resource"]["subject"] != null)
                    {
                        string subject_reference = (string)(((JObject)entries[i])["resource"]["subject"]["reference"]);
                        if (!String.IsNullOrEmpty(subject_reference))
                        {
                            for (int j = 0; j < entries.Count; j++)
                            {
                                if ((string)(((JObject)entries[j])["fullUrl"]) == subject_reference)
                                {
                                    subject_reference = (string)(((JObject)entries[j])["resource"]["resourceType"]) + "/" + (string)(((JObject)entries[j])["resource"]["id"]);
                                    break;
                                }
                            }
                        }
                        ((JObject)entries[i])["resource"]["subject"]["reference"] = subject_reference;
                        entry_json = (((JObject)entries[i])["resource"]).ToString();
                    }

                    if (((JObject)entries[i])["resource"]["context"] != null)
                    {
                        string context_reference = (string)(((JObject)entries[i])["resource"]["context"]["reference"]);
                        if (!String.IsNullOrEmpty(context_reference))
                        {
                            for (int j = 0; j < entries.Count; j++)
                            {
                                if ((string)(((JObject)entries[j])["fullUrl"]) == context_reference)
                                {
                                    context_reference = (string)(((JObject)entries[j])["resource"]["resourceType"]) + "/" + (string)(((JObject)entries[j])["resource"]["id"]);
                                    break;
                                }
                            }
                        }
                        ((JObject)entries[i])["resource"]["context"]["reference"] = context_reference;
                        entry_json = (((JObject)entries[i])["resource"]).ToString();
                    }

                    var token = await _easyAuthProxy.GetAadAccessToken();

                    client.DefaultRequestHeaders.Clear();
                    client.DefaultRequestHeaders.Add("x-ms-consistency-level", "Eventual");
                    client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");

                    StringContent       content      = new StringContent(entry_json, Encoding.UTF8, "application/json");
                    HttpResponseMessage uploadResult = null;

                    if (String.IsNullOrEmpty(id))
                    {
                        uploadResult = await client.PostAsync($"/{resource_type}", content);
                    }
                    else
                    {
                        uploadResult = await client.PutAsync($"/{resource_type}/{id}", content);
                    }

                    if (!uploadResult.IsSuccessStatusCode)
                    {
                        string resultContent = await uploadResult.Content.ReadAsStringAsync();

                        Console.WriteLine(resultContent);
                    }
                }
            }
            return(Redirect("/Reservoir"));
        }