public ArchimedesResponseHelper(Interventions floater, CVDRisk CVD, HighCVDRisk HighCVD, LowCVDRisk LowCVD, OtherArchInfo OtherArch)
 {
     this.DoctorRecommendation = OtherArch.DoctorRecommendation;
     this.ElevatedBloodPressure = OtherArch.ElevatedBloodPressure;
     this.ElevatedCholesterol = OtherArch.ElevatedCholesterol;
     this.Recommendation = OtherArch.Recommendation;
     this.WarningCode = OtherArch.WarningCode;
     this.CVDComparisonRisk = CVD.comparisonRisk;
     this.CVDRating = CVD.rating;
     this.CVDRatingForAge = CVD.ratingForAge;
     this.CVDRisk = CVD.risk;
     this.CVDRiskPercentile = CVD.riskPercentile;
     this.HighComparisonRisk = HighCVD.comparisonRisk;
     this.HighRating = HighCVD.rating;
     this.HighRatingForAge = HighCVD.ratingForAge;
     this.HighRisk = HighCVD.risk;
     this.HighRiskPercentile = HighCVD.riskPercentile;
     this.LowComparisonRisk = LowCVD.comparisonRisk;
     this.LowRating = LowCVD.rating;
     this.LowRatingForAge = LowCVD.ratingForAge;
     this.LowRisk = LowCVD.risk;
     this.LowRiskPercentile = LowCVD.riskPercentile;
     this.ModerateExerciseReduction = floater.ModerateExerciseReduction;
     this.VigorousExerciseReduction = floater.VigorousExerciseReduction;
     this.IncreaseInRisk = floater.IncreaseInRisk;
     this.WeightLossReduction = floater.WeightLossReduction;
     this.WeightLossRequired = floater.WeightLossRequired;
     this.SmokingReduction = floater.SmokingReduction;
     this.AllReductions = floater.AllReductions;
     this.MedicationReduction = floater.MedicationReduction;
 }
        public ArchimedesResponseHelper sendArchimedesDataFull(ArchimedesPostHelper ArchObj)
        {
            //Remember that ArchimedesHelper helper classes default many fields. Handle the way you want to handle nulls and defaults before passing through to Full.
            var url = "https://demo-indigo4health.archimedesmodel.com/IndiGO4Health/IndiGO4Health";
            var postdata =
                "age=" + ArchObj.age +
                "&gender=" + ArchObj.gender + "&height= " + ArchObj.height +
                "&weight=" + ArchObj.weight + "&smoker=" + ArchObj.smoker +
                "&mi=" + ArchObj.mi + "&stroke=" + ArchObj.stroke +
                "&diabetes=" + ArchObj.diabetes + "&systolic=" + ArchObj.systolic +
                "&diastolic=" + ArchObj.diastolic + "&cholesterol=" + ArchObj.cholesterol +
                "&hdl=" + ArchObj.hdl + "&ldl=" + ArchObj.ldl +
                "&triglycerides=" + ArchObj.triglycerides + "&hba1c=" + ArchObj.hba1c +
                "&cholesterolmeds=" + ArchObj.cholesterolmeds + "&bloodpressuremeds=" + ArchObj.bloodpressuremeds +
                "&bloodpressuremedcount=" + ArchObj.bloodpressuremedcount + "&aspirin=" + ArchObj.aspirin +
                "&moderateexercise=" + ArchObj.moderateexercise + "&vigorousexercise=" + ArchObj.vigorousexercise +
                "&familyhistory=" + ArchObj.familymihistory;

            try
            {
                //Create the Request

                var request = WebRequest.Create(url);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                byte[] byteArray = Encoding.UTF8.GetBytes(postdata);
                request.ContentLength = byteArray.Length;
                Stream dataStream = request.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();
                var response = (HttpWebResponse)request.GetResponse();

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    //Write the Request to a string

                    var mem = new MemoryStream();
                    var responseStream = response.GetResponseStream();

                    var buffer = new Byte[2048];
                    int count = responseStream.Read(buffer, 0, buffer.Length);

                    while (count > 0)
                    {
                        mem.Write(buffer, 0, count);
                        count = responseStream.Read(buffer, 0, buffer.Length);
                    }
                    responseStream.Close();
                    mem.Close();

                    var responseArray = mem.ToArray();
                    var encoding = new System.Text.UTF8Encoding();

                    //Write to a variable

                    var json = encoding.GetString(responseArray);

                    //Parse into JSON

                    JObject obj = JObject.Parse(json);
                    var archRisk = new Interventions((float)obj["Interventions"]["IncreaseInRisk"], (float)obj["Interventions"]["PercentReductionInRiskWithAdditionalModerateExercise"], (float)obj["Interventions"]["PercentReductionInRiskWithAdditionalVigorousExercise"], (float)obj["Interventions"]["PercentReductionInRiskWithWeightLoss"], (float)obj["Interventions"]["PercentReductionInRiskWithMedication"], (float)obj["Interventions"]["PercentReductionWithSmokingCessation"], (float)obj["Interventions"]["PercentReductionWithAllInterventions"], (float)obj["Interventions"]["PoundsOfWeightLossRequired"]);

                    //From the API Documentation, it seems that the API in production mode will either return Risk comparisons or not. Non-production API doesn't do this, but let's build for this future.

                    if (obj["Risk"] != null)
                    {

                        var CRisk = new CVDRisk((float)obj["Risk"][0]["comparisonRisk"], (float)obj["Risk"][0]["rating"], (float)obj["Risk"][0]["ratingForAge"], (float)obj["Risk"][0]["risk"], (float)obj["Risk"][0]["riskPercentile"]);
                        var HRisk = new HighCVDRisk((float)obj["Risk"][1]["comparisonRisk"], (float)obj["Risk"][1]["rating"], (float)obj["Risk"][1]["ratingForAge"], (float)obj["Risk"][1]["risk"], (float)obj["Risk"][1]["riskPercentile"]);
                        var LRisk = new LowCVDRisk((float)obj["Risk"][2]["comparisonRisk"], (float)obj["Risk"][2]["rating"], (float)obj["Risk"][2]["ratingForAge"], (float)obj["Risk"][2]["risk"], (float)obj["Risk"][2]["riskPercentile"]);
                        var other = new OtherArchInfo((Boolean)obj["ElevatedBloodPressure"], (Boolean)obj["ElevatedCholesterol"], (float)obj["WarningCode"], (float)obj["Recommendation"], (float)obj["DoctorRecommendation"]);
                        var archResponse = new ArchimedesResponseHelper(archRisk, CRisk, HRisk, LRisk, other);
                        return archResponse;
                    }
                    else
                    {
                        var other = new OtherArchInfo((Boolean)obj["ElevatedBloodPressure"], (Boolean)obj["ElevatedCholesterol"], (float)obj["WarningCode"], (float)obj["Recommendation"], (float)obj["DoctorRecommendation"]);
                        var archResponse = new ArchimedesResponseHelper(archRisk, other);
                        return archResponse;
                    }

                }
                else
                {
                    throw new Exception(String.Format(
                "Server error (HTTP {0}: {1}).",
                response.StatusCode,
                response.StatusDescription));
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return null;

            }
        }