public IEnumerable<ResponseHelper> GetFeedsForUser(string userId)
        {
            Guid userIdAsGuid = Guid.Empty;
            Guid.TryParse(userId, out userIdAsGuid);

            var dbContext = new Care4allDatabaseContext();

            var responses = from r in dbContext.Responses where r.RespondingUserId == userIdAsGuid select r;

            var responseList = new List<ResponseHelper>();
            foreach( Response response in responses )
            {
                var messge = from m in dbContext.Messages where m.Id == response.MessageId select m;
                var user = from u in dbContext.Users where u.Id == response.AskingUserId select u;

                var responseHelper = new ResponseHelper();
                    responseHelper.RespondingUserPic = user.ToList()[0].HelperPhoto;
                    responseHelper.Question = messge.ToList()[0].Content;
                    responseHelper.Content = response.Content;

                responseList.Add( responseHelper );
            }

            return responseList;
        }
        public string GetProgressForUser(string userId)
        {
            Guid userIdAsGuid = Guid.Empty;
            Guid.TryParse(userId, out userIdAsGuid);

            var dbContext = new Care4allDatabaseContext();

            var responses = from r in dbContext.Responses where r.RespondingUserId == userIdAsGuid select r;

            int dayCount = 1;
            var dayCountAsString = new StringBuilder();
            var dataProgress = new StringBuilder();
            foreach (Response response in responses)
            {
                dayCount++;
                dayCountAsString.AppendFormat("{0},", dayCount);

                var message = from m in dbContext.Messages where m.Id == response.MessageId select m;
                var answer = message.ToList()[0].Content;

                // null, null, 30, 45, 69, 70
                if ( answer.Contains("Yes") )
                {
                    dataProgress.AppendFormat( "{0},", 1 );
                }
                else if (answer.Contains("No"))
                {
                    dataProgress.AppendFormat("{0},", -1);
                }
                else
                {
                    dataProgress.AppendFormat("{0},", 0);
                }
            }
            if (dayCountAsString.Length > 0)
                dayCountAsString.Remove(dayCountAsString.Length - 1, 1);
            if (dataProgress.Length > 0)
                dataProgress.Remove(dataProgress.Length - 1, 1);

            var progress = new StringBuilder();
                progress.Append( "{\"data\":[" );
                progress.Append("{ \"data\": [ ");
                progress.Append( dataProgress.ToString() );
                progress.Append( " ], \"title\": \"\" }" ); // { "data": [ null, null, 30, 45, 69, 70 ], "title": "Smith" }
                progress.Append( "],\"x_labels\": [ " );
                progress.Append( dayCountAsString.ToString() );
                progress.Append( " ] }" );

            return progress.ToString();
        }
        public IEnumerable<MessageHelper> GetMessagesForUser(string parentUserIdWithUserId)
        {
            var parentUserIdWithUserIdAsArray = parentUserIdWithUserId.Split(new char[] { ';' });

            var parentUserIdAsString = parentUserIdWithUserIdAsArray[0];
            var userIdAsString = parentUserIdWithUserIdAsArray[1];

            Guid parentUserId;
            Guid userId;
            Guid.TryParse( parentUserIdAsString, out parentUserId );
            Guid.TryParse( userIdAsString, out userId );

            var dbContext = new Care4allDatabaseContext();

            var messagesToAsk = from ma in dbContext.MessageActivations
                                where ma.DestinationUserId == userId select ma; // ma.SourceUserId == parentUserId &&

            var messageList = new List<MessageHelper>();
            foreach (MessageActivation messageToAsk in messagesToAsk )
            {
                var message = from m in dbContext.Messages where m.Id == messageToAsk.MessageId select m;
                var jokeMessage = from m in dbContext.Messages where m.Id == messageToAsk.JokeMessageId select m;
                var user = from u in dbContext.Users where u.Id == messageToAsk.SourceUserId select u;

                var messageHelper = new MessageHelper();
                    messageHelper.AskingUserId = user.ToList()[0].Id;
                    messageHelper.AskingUserPic = user.ToList()[0].HelperPhoto;
                    messageHelper.Message = message.ToList()[0];
                    if (message.ToList()[0].Type == 1)
                        messageHelper.JokeMessage = jokeMessage.ToList()[0].Content;

                messageList.Add(messageHelper);
            }

            return messageList;
        }
        /// <summary>
        /// Input 123123123123123;Jane;ASDQWPOKDOIJUIUu86234b23j423423k42=
        /// 0          1    2
        /// facebookID;Name;Photo
        /// </summary>
        /// <param name="RegisterWithFacebook"></param>
        public User RegisterWithFacebook(string facebook)
        {
            var facebookAsArray = facebook.Split(new char[] { ';' });

            var facebookIdAsString = facebookAsArray[0];
            var name = facebookAsArray[1];
            var photoAsBase64 = facebookAsArray[2];

            var dbContext = new Care4allDatabaseContext();

            var existingUser = from u in dbContext.Users where facebookIdAsString.Equals( u.ThirdPartyId ) select u;

            User user = null;
            if ( existingUser != null && existingUser.ToList().Count > 0 )
            {
                user = existingUser.ToList()[0];
            }
            else
            {
                user = new User() { Id = Guid.NewGuid(), ParentId = Guid.Empty, ThirdPartyId = facebookIdAsString, PinCode = string.Empty, HelperName = name, HelperPhoto = photoAsBase64 };

                dbContext.Users.Add(user);
                dbContext.SaveChanges();
            }

            return user;
        }
        /// <summary>
        /// Input {xxxx-xxxx-xxxx-xxxx};1401;Jane;ASDQWPOKDOIJUIUu86234b23j423423k42=
        /// 0        1   2           3
        /// parentID;pin;GrandmaName;Photo
        /// </summary>
        /// <param name="parentIdWithPinAndDetails"></param>
        public void PreparePin(string parentIdWithPinAndDetails)
        {
            var parentIdWithPinAndDetailsAsArray = parentIdWithPinAndDetails.Split(new char[] { ';' });

            #region Get Parent Id

            var parentIdAsString = parentIdWithPinAndDetailsAsArray[0];
            Guid parentId = Guid.Empty;
            Guid.TryParse( parentIdAsString, out parentId );

            #endregion

            #region Get Grand Ma-s details

            var pin = parentIdWithPinAndDetailsAsArray[1];
            var grandmaName = parentIdWithPinAndDetailsAsArray[2];
            var photoAsBase64 = parentIdWithPinAndDetailsAsArray[3];

            var user = new User() { Id = Guid.NewGuid(), ParentId = parentId, PinCode = pin, HelperName=grandmaName, HelperPhoto=photoAsBase64 };

            var dbContext = new Care4allDatabaseContext();
                dbContext.Users.Add(user);
                dbContext.SaveChanges();

            #endregion

            #region Generate Default Settings

            var dictionary = new Dictionary<string,string>();
                dictionary.Add( "c1d80f1c-3c08-4b10-8df1-2ad0b05f8cc4", "77227f63-76c9-498c-82ac-5f71e88c9eb0" );
                dictionary.Add( "fbe2807a-de4e-4cb2-8bec-7c875d97aff0", "00000000-0000-0000-0000-000000000000" );
                dictionary.Add( "e99a2ab8-b239-4920-a074-f33aa0da4967", "fd7a4513-e93c-41db-b54f-86cdda3bffbc" );
                dictionary.Add( "ff9c94b2-c28c-444a-bb4c-10eb8b3c6731", "00000000-0000-0000-0000-000000000000" );
                dictionary.Add( "a3ebd50c-35ec-4f2c-a00f-9151d2fff8a3", "fc1109a3-e73d-47b5-8bda-ddcdcbee154b" );
                dictionary.Add( "a92d978c-4a9a-4c5b-a128-08b8ff02d86e", "992b7cd3-83be-47c5-8abd-a9d3b8424d8b" );
                dictionary.Add( "9ecd3f15-d0e3-4329-be35-9b0992d622a9", "a15f8ae7-92c4-4b27-bf88-582d829cc5a9" );
                dictionary.Add( "76e2b960-4f9a-4b0b-9e33-4c49b24113e9", "00000000-0000-0000-0000-000000000000" );

            foreach( string key in dictionary.Keys )
            {
                var value = dictionary[ key ];

                dbContext.MessageActivations.Add
                (
                    new MessageActivation()
                    {
                        Id = Guid.NewGuid(),
                        SourceUserId = parentId,
                        DestinationUserId = user.Id,
                        MessageId = Guid.Parse( key ),
                        JokeMessageId = Guid.Parse( value ),
                        IsActive = true
                    }
                );

            }
            dbContext.SaveChanges();

            //82594a4e-dcd1-4d53-84a7-0bc8791ea244	45ca8921-a116-4a99-817d-36c6a64c2f52	86207dc0-b3c8-4d96-8546-49c258d5b638	c1d80f1c-3c08-4b10-8df1-2ad0b05f8cc4	77227f63-76c9-498c-82ac-5f71e88c9eb0	True
            //90769f17-6b45-436f-9e73-3509a8621251	45ca8921-a116-4a99-817d-36c6a64c2f52	86207dc0-b3c8-4d96-8546-49c258d5b638	fbe2807a-de4e-4cb2-8bec-7c875d97aff0	00000000-0000-0000-0000-000000000000	True
            //b5357955-592f-400b-bf8a-3a0e5a910c90	45ca8921-a116-4a99-817d-36c6a64c2f52	86207dc0-b3c8-4d96-8546-49c258d5b638	e99a2ab8-b239-4920-a074-f33aa0da4967	fd7a4513-e93c-41db-b54f-86cdda3bffbc	True
            //77227f63-76c9-498c-82ac-5f71e88c9eb0	45ca8921-a116-4a99-817d-36c6a64c2f52	86207dc0-b3c8-4d96-8546-49c258d5b638	ff9c94b2-c28c-444a-bb4c-10eb8b3c6731	00000000-0000-0000-0000-000000000000	True
            //fd7a4513-e93c-41db-b54f-86cdda3bffbc	45ca8921-a116-4a99-817d-36c6a64c2f52	86207dc0-b3c8-4d96-8546-49c258d5b638	a3ebd50c-35ec-4f2c-a00f-9151d2fff8a3	fc1109a3-e73d-47b5-8bda-ddcdcbee154b	True
            //a20f5b8d-9b26-40b6-bfc6-a7e3bf860a05	45ca8921-a116-4a99-817d-36c6a64c2f52	86207dc0-b3c8-4d96-8546-49c258d5b638	a92d978c-4a9a-4c5b-a128-08b8ff02d86e	992b7cd3-83be-47c5-8abd-a9d3b8424d8b	True
            //2fab1b19-2e3b-4e83-905c-b97ab311af89	45ca8921-a116-4a99-817d-36c6a64c2f52	86207dc0-b3c8-4d96-8546-49c258d5b638	9ecd3f15-d0e3-4329-be35-9b0992d622a9	a15f8ae7-92c4-4b27-bf88-582d829cc5a9	True
            //e99a2ab8-b239-4920-a074-f33aa0da4967	45ca8921-a116-4a99-817d-36c6a64c2f52	86207dc0-b3c8-4d96-8546-49c258d5b638	76e2b960-4f9a-4b0b-9e33-4c49b24113e9	00000000-0000-0000-0000-000000000000	True

            #endregion
        }
        public User RegisterWithPin(string pin)
        {
            var dbContext = new Care4allDatabaseContext();

            var arrayOfValues = from u in dbContext.Users where u.PinCode == pin select u;

            var user = arrayOfValues.ToArray()[0];

            dbContext.Users.Remove( user );
            dbContext.SaveChanges();

            user.PinCode = string.Empty;
            dbContext.Users.Add(user);
            dbContext.SaveChanges();

            return user;
        }
        /// <summary>
        /// userId;messageId;answer
        /// </summary>
        /// <param name="userIdWithAnswer"></param>
        public void RegisterAnswerForUser(string userIdWithAnswer)
        {
            var userIdWithAnswerAsArray = userIdWithAnswer.Split(new char[] { ';' });

            var userIdAsString = userIdWithAnswerAsArray[0];
            var messageIdAsString = userIdWithAnswerAsArray[1];
            var answer = userIdWithAnswerAsArray[2];

            Guid userId;
            Guid.TryParse( userIdAsString, out userId );

            Guid messageId;
            Guid.TryParse(messageIdAsString, out messageId);

            var dbContext = new Care4allDatabaseContext();

            var messageActivation = from ma in dbContext.MessageActivations where ma.MessageId == messageId select ma;

            var response = new Response() { Id = Guid.NewGuid(),
                AskingUserId = messageActivation.ToList()[0].SourceUserId,
                RespondingUserId = userId,
                MessageId = messageId,
                Content = answer
            };

            dbContext.Responses.Add( response );
            dbContext.SaveChanges();
        }
        public IEnumerable<User> GetUsers(string parentUserId)
        {
            Guid parentId = Guid.Empty;
            Guid.TryParse(parentUserId, out parentId);

            var dbContext = new Care4allDatabaseContext();

            var users = from u in dbContext.Users where u.ParentId == parentId select u;

            return users.ToList();
        }