public ResponseModel<LoginResponse> CheckAndSaveFacebookUserInfoIntoDatabase(string fid, string refKey, string access_token, bool isMobileApiCall)
        {
            var response = new ResponseModel<LoginResponse>();
            var ifFacebookUserAlreadyRegistered = _db.FacebookAuths.SingleOrDefault(x => x.facebookId == fid);

            if (isMobileApiCall)
            {
                var fb = new FacebookClient(access_token);

                dynamic fqlResponse = fb.Get("fql",
                            new { q = "SELECT uid, first_name, last_name, sex, pic_big_with_logo, username FROM user WHERE uid=me()" });
                var FacebookAuthData = new FacebookAuth();                
                FacebookAuthData.username = Constants.NA;
                FacebookAuthData.AuthToken = access_token;
                FacebookAuthData.datetime = DateTime.Now.ToString();
                FacebookAuthData.facebookId = Convert.ToString(fqlResponse.data[0].uid);
                FacebookAuthData.facebookUsername = fqlResponse.data[0].username;

                //var ifAlreadyExists = _db.FacebookAuths.SingleOrDefault(x => x.facebookId == fid);
                if (ifFacebookUserAlreadyRegistered == null)
                {
                    _db.FacebookAuths.Add(FacebookAuthData);
                    ifFacebookUserAlreadyRegistered = FacebookAuthData;
                }
                else
                {
                    // refresh the token
                    ifFacebookUserAlreadyRegistered.AuthToken = access_token;
                    ifFacebookUserAlreadyRegistered.datetime = DateTime.Now.ToString();
                }
            }

            //var ifFacebookUserAlreadyRegistered = _db.FacebookAuths.SingleOrDefault(x => x.facebookId == fid);
            if (ifFacebookUserAlreadyRegistered.username != Constants.NA)
            {
                if (_db.Users.Any(x => x.Username == ifFacebookUserAlreadyRegistered.username))
                {
                    var user = _db.Users.SingleOrDefault(x => x.Username == ifFacebookUserAlreadyRegistered.username);
                    if (user != null)
                    {
                        var data = new Dictionary<string, string>();
                        data["Username"] = user.Username;
                        data["Password"] = user.Password;
                        data["userGuid"] = user.guid;

                        var encryptedData = EncryptionClass.encryptUserDetails(data);

                        response.Payload = new LoginResponse();
                        response.Payload.UTMZK = encryptedData["UTMZK"];
                        response.Payload.UTMZV = encryptedData["UTMZV"];
                        response.Payload.TimeStamp = DateTime.Now.ToString(CultureInfo.InvariantCulture);
                        response.Payload.Code = "210";
                        response.Status = 210;
                        response.Message = "user Login via facebook";
                        try
                        {
                            user.KeepMeSignedIn = "true";//keepMeSignedIn.Equals("true", StringComparison.OrdinalIgnoreCase) ? "true" : "false";
                            user.Locked = Constants.status_false;
                            _db.SaveChanges();

                            var session = new M2ESession(ifFacebookUserAlreadyRegistered.username);
                            TokenManager.CreateSession(session);
                            response.Payload.UTMZT = session.SessionId;
                            return response;

                        }
                        catch (DbEntityValidationException e)
                        {
                            DbContextException.LogDbContextException(e);
                            response.Payload.Code = "500";

                            return response;
                        }
                    }
                    else
                        response.Payload.Code = "403";
                }
            }
            else
            {
                //save user details in database ..

                var fb = new FacebookClient(ifFacebookUserAlreadyRegistered.AuthToken);
                dynamic result = fb.Get("fql",
                            new { q = "SELECT uid, first_name, last_name, sex, pic_big_with_logo, username FROM user WHERE uid=me()" });

                var guid = Guid.NewGuid().ToString();
                var user = new User
                {
                    Username = result.data[0].username + "@facebook.com",
                    Password = EncryptionClass.Md5Hash(Guid.NewGuid().ToString()),
                    Source = "facebook",
                    isActive = "true",
                    Type = "user",
                    guid = Guid.NewGuid().ToString(),
                    fixedGuid = Guid.NewGuid().ToString(),
                    FirstName = result.data[0].first_name,
                    LastName = result.data[0].last_name,
                    gender = result.data[0].sex,
                    ImageUrl = result.data[0].pic_big_with_logo
                };
                _db.Users.Add(user);

                if (!Constants.NA.Equals(refKey))
                {
                    new ReferralService().payReferralBonusAsync(refKey, user.Username, Constants.status_true);
                }

                try
                {
                    ifFacebookUserAlreadyRegistered.username = user.Username;
                    _db.SaveChanges();

                    var data = new Dictionary<string, string>();
                    data["Username"] = user.Username;
                    data["Password"] = user.Password;
                    data["userGuid"] = user.guid;

                    var encryptedData = EncryptionClass.encryptUserDetails(data);

                    response.Payload = new LoginResponse();
                    response.Payload.UTMZK = encryptedData["UTMZK"];
                    response.Payload.UTMZV = encryptedData["UTMZV"];
                    response.Payload.TimeStamp = DateTime.Now.ToString(CultureInfo.InvariantCulture);
                    response.Payload.Code = "210";
                    response.Status = 210;
                    response.Message = "user Login via facebook";
                    try
                    {
                        var session = new M2ESession(ifFacebookUserAlreadyRegistered.username);
                        TokenManager.CreateSession(session);
                        response.Payload.UTMZT = session.SessionId;
                    }
                    catch (DbEntityValidationException e)
                    {
                        DbContextException.LogDbContextException(e);
                        response.Status = 500;
                        response.Message = "Internal Server Error !!";
                    }
                    var signalRHub = new SignalRHub();
                    string totalProjects = "";
                    string successRate = "";
                    string totalUsers = _db.Users.Count().ToString(CultureInfo.InvariantCulture);
                    string projectCategories = "";

                    new UserMessageService().SendUserNotificationForAccountVerificationSuccess(
                        user.Username, user.Type
                    );

                    var hubContext = GlobalHost.ConnectionManager.GetHubContext<SignalRHub>();
                    hubContext.Clients.All.updateBeforeLoginUserProjectDetails(totalProjects, successRate, totalUsers, projectCategories);
                }
                catch (DbEntityValidationException e)
                {
                    DbContextException.LogDbContextException(e);
                    response.Status = 500;
                    response.Message = "Internal Server Error !!!";
                }

            }

            return response;
        }
        public ActionResult FBLogin(string type)
        {
            var response = new ResponseModel<string>();

            String code = Request.QueryString["code"];
            string app_id = string.Empty;
            string app_secret = string.Empty;
            string returnUrl = "http://"+Request.Url.Authority+"/SocialAuth/FBLogin/facebook/";
            if(Request.Url.Authority.Contains("localhost"))
            {
                app_id = ConfigurationManager.AppSettings["FacebookAppID"].ToString();
                app_secret = ConfigurationManager.AppSettings["FacebookAppSecret"].ToString();
            }
            else
            {
                app_id = ConfigurationManager.AppSettings["FacebookAppIDCautom"].ToString();
                app_secret = ConfigurationManager.AppSettings["FacebookAppSecretCautom"].ToString();
            }
            

            string scope = "";
            if (code == null)
            {
                response.Status = 199;
                response.Message = "reload page with given url";
                response.Payload = (string.Format(
                    "https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}",
                    app_id, returnUrl, scope));
                
                //return Json(response,JsonRequestBehavior.AllowGet);
                Response.Redirect(response.Payload);
            }
            else
            {
                try
                {
                    string access_token = new FacebookService().getFacebookAuthToken(returnUrl, scope, code, app_id, app_secret);
                    var fb = new FacebookClient(access_token);
                    //dynamic result = fb.Get("fql",
                    //            new { q = "SELECT uid, name, first_name, middle_name, last_name, sex, locale, pic_small_with_logo, pic_big_with_logo, pic_square_with_logo, pic_with_logo, username FROM user WHERE uid=me()" });

                    dynamic fqlResponse = fb.Get("fql",
                                new { q = "SELECT uid, username FROM user WHERE uid=me()" });
                    var FacebookAuthData = new FacebookAuth();
                    string fid = Convert.ToString(fqlResponse.data[0].uid);
                    FacebookAuthData.username = Constants.NA;
                    FacebookAuthData.AuthToken = access_token;
                    FacebookAuthData.datetime = DateTime.Now.ToString();
                    FacebookAuthData.facebookId = Convert.ToString(fqlResponse.data[0].uid);
                    FacebookAuthData.facebookUsername = fqlResponse.data[0].username;

                    var ifAlreadyExists = _db.FacebookAuths.SingleOrDefault(x => x.facebookId == fid);
                    if (ifAlreadyExists == null)
                    {                        
                        _db.FacebookAuths.Add(FacebookAuthData);
                    }
                    else
                    {
                        // refresh the token
                        ifAlreadyExists.AuthToken = access_token;
                        ifAlreadyExists.datetime = DateTime.Now.ToString();
                    }
                    try
                    {
                        _db.SaveChanges();                        
                        response.Status = 200;
                        response.Message = "success-";                        
                    }
                    catch (DbEntityValidationException e)
                    {
                        DbContextException.LogDbContextException(e);
                        response.Status = 500;
                        response.Message = "Failed";                        
                    }

                    ViewBag.facebookId = fqlResponse.data[0].uid;
                    return View(FacebookAuthData);
                }
                catch (Exception ex)
                {

                    logger.Error("Error Occured while getting Facebook Auth Token",ex);
                }
                
                //var fb = new FacebookClient();
                //dynamic result = fb.Get("fql",
                    //new { q = "SELECT page_id FROM page_fan WHERE uid=100001648098091 AND page_id=223215721036909" });  
                
 
                //To obtain an App Access Token, invoke the following HTTP GET request

                //GET https://graph.facebook.com/oauth/access_token?
                //            client_id=YOUR_APP_ID
                //           &client_secret=YOUR_APP_SECRET
                //           &grant_type=client_credentials

                //The API will respond with a query-string formatted string of the form:

                //    access_token=YOUR_APP_ACCESS_TOKEN
            }
            return View();
        }