public virtual RestaurantUser CreateUser(RestaurantUser user, out MembershipCreateStatus status, string secretQuestion, string secretAnswer)
        {
            //users will be stored as GUID as their providerkey in Membership database and with
            //Real name in Restaurant Database
            RestaurantMembershipUser = user;
            CheckRestaurantMembershipUser();
            MembershipUser sqlresult;
            var            repoIdresult = -1;

            // Guest user will have their GUID as their username and Password because Guest user can never log in,
            // he is automatically logged in through his authentication ticket, so this will always be an internal call
            // Also since all user needs to have a valid email id except Guest user, we are using guid as dummy email
            if (user.UserRole == UserBase.RestaurantUserRole.Guest)
            {
                sqlresult = base.CreateUser(user.UserGuid.ToString(), user.UserGuid.ToString(), user.UserGuid.ToString() + "@guestuser.com", null, null,
                                            true, user.UserGuid, out status);
                if (status == MembershipCreateStatus.Success)
                {
                    //Login Expiration for a Guset user is set to 86400 Minutes, ie 60 days
                    user.LoginExpiresOn = DateTime.UtcNow.AddMinutes(86400D);
                    user.Password       = user.UserGuid.ToString();
                    repoIdresult        = UserRepository.Add(user);
                }
            }
            //Facebook user will have their id as username and UserGuid as password
            else if (user.FacebookDetail != null && user.FacebookDetail.FacebookId > 0 && !user.FacebookDetail.OAuthToken.IsNullOrEmpty())
            {
                sqlresult = base.CreateUser(user.FacebookDetail.FacebookId.ToString(), user.UserGuid.ToString(),
                                            user.EmailId, null, null, true, user.UserGuid, out status);
                if (status == MembershipCreateStatus.Success)
                {
                    user.Password       = user.UserGuid.ToString();
                    user.LoginExpiresOn = user.FacebookDetail.ExpiresOn;
                    repoIdresult        = UserRepository.Add(user);
                }
            }
            //For every one else the user creation is normal
            else
            {
                sqlresult = base.CreateUser(user.EmailId, user.Password, user.EmailId,
                                            secretQuestion, secretAnswer, true, user.UserGuid, out status);
                if (status == MembershipCreateStatus.Success)
                {
                    user.LoginExpiresOn = DateTime.UtcNow.AddMinutes(FormsAuthentication.Timeout.TotalMinutes);
                    repoIdresult        = UserRepository.Add(user);
                }
            }
            if (status == MembershipCreateStatus.Success && sqlresult != null && repoIdresult > 0)
            {
                return(new RestaurantUser(repoIdresult, user.Name, user.UserGuid, user.MobileNumber, user.LoginExpiresOn,
                                          user.UserRole, user.Address, user.EmailId, user.Password, user.FacebookDetail,
                                          sqlresult));
            }
            return(null);
        }