public IHttpActionResult makeUserInvisible()

        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("id");
            String id  = headerValues.FirstOrDefault();
            int    id2 = Int32.Parse(id);

            headerValues = Request.Headers.GetValues("mode"); //za modove tek treba da se vidi logika
            String modeString = headerValues.FirstOrDefault();
            int    mode       = Int32.Parse(modeString);



            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                var itemToRemove = context.active_users.SingleOrDefault(x => x.user_id == id2 && x.active_mode == mode);

                //logika kako obraditi mode, da se oduzima pa ako je 0 da se brise, ili tako nesto

                if (itemToRemove != null)
                {
                    context.active_users.Remove(itemToRemove);
                    context.SaveChanges();
                }
            }

            return(Ok());
        }
        [Route("rest/getUser/{id}")] //test, ne koristi se nigde u aplikaciji, prvi rest servis koji sam napisao u c#, sentimentalno sam vezan
        public IHttpActionResult getUser(int id)
        {
            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                var ResultSetUserInfo = (from s in context.users
                                         join sa in context.user_info on s.id equals sa.id_user_private
                                         where sa.id_user_private == id
                                         select new User()
                {
                    Id = s.id,
                    Username = s.username,
                    FirstName = sa.firstName,
                    LastName = sa.lastName,
                    Email = sa.email,
                    PhoneNumber = sa.phoneNumber,
                    DateOfBirth = sa.dateOfBirth,
                    Adress = sa.adress,
                    ProfilePictureData = sa.profilePictureData,
                    FbLink = sa.fbLink,
                    TwitterLink = sa.twLink,
                    GPlusLink = sa.gPlusLink,
                    LinkedInLink = sa.linkedInLink
                });

                var userInfo = ResultSetUserInfo.FirstOrDefault <User>();
                if (userInfo != null)
                {
                    return(Ok(userInfo));
                }
            }

            return(NotFound());
        }
        public IHttpActionResult doesUsernameExist()
        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("username");
            String username = headerValues.FirstOrDefault();


            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                var ResultSetUserInfo = (from s in context.users

                                         where s.username == username
                                         select new SimpleUser()
                {
                    Id = s.id,
                    Username = s.username,
                    Password = s.password,
                });

                var userInfo = ResultSetUserInfo.FirstOrDefault <SimpleUser>();
                if (userInfo != null)
                {
                    return(Ok(userInfo));
                }
            }

            return(NotFound());
        }
        public IHttpActionResult registerUser()
        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("username");
            String username2 = headerValues.FirstOrDefault();


            headerValues = Request.Headers.GetValues("password");
            String password2 = headerValues.FirstOrDefault();


            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                context.users.Add(new EntityFrameworkModels.users()
                {
                    username = username2,
                    password = password2
                });



                context.user_info.Add(new EntityFrameworkModels.user_info());
                context.business_info.Add(new EntityFrameworkModels.business_info());
                context.SaveChanges();



                var ResultSetUserInfo2 = (from s in context.users
                                          join sa in context.user_info on s.id equals sa.id_user_private
                                          where s.username == username2 && s.password == password2
                                          select new User()
                {
                    Id = s.id,
                    Username = s.username,
                    FirstName = sa.firstName,
                    LastName = sa.lastName,
                    Email = sa.email,
                    PhoneNumber = sa.phoneNumber,
                    DateOfBirth = sa.dateOfBirth,
                    Adress = sa.adress,
                    ProfilePictureData = sa.profilePictureData,
                    FbLink = sa.fbLink,
                    TwitterLink = sa.twLink,
                    GPlusLink = sa.gPlusLink,
                    LinkedInLink = sa.linkedInLink
                });

                var userInfo2 = ResultSetUserInfo2.FirstOrDefault <User>();
                if (userInfo2 != null)
                {
                    return(Ok(userInfo2));                   //mozda treba da se smisli nekako da ne vraca ovaj objekat, ali vec sam napravio da Register i startPage u klijentu ovako radi, sa ovim objektom, zato ga vracam
                }
            }

            return(NotFound());
        }
        [Route("rest/getBusiness/{idOwner}")] //public REST servis, ako neko bas hoce, moze i iz browsera da pretrazuje kompanije, visak vidljivosti njima ne smeta

        public IHttpActionResult getBusiness(int idOwner)
        {
            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                var ResultSetBusinessInfo = (from s in context.business_info

                                             where s.id_business_owner == idOwner
                                             select new Business()
                {
                    Adress = s.adress,
                    CompanyName = s.companyname,
                    Email = s.email,
                    IdBusinessOwner = s.id_business_owner,
                    PhoneNumber = s.phonenumber,
                    Website = s.website,
                    ProfilePictureData = s.profilepicturedata
                });

                var businessInfo = ResultSetBusinessInfo.FirstOrDefault <Business>();

                if (businessInfo != null)
                {
                    BusinessEncoded businessEncoded = new BusinessEncoded()
                    {
                        Website         = businessInfo.Website,
                        Adress          = businessInfo.Adress,
                        CompanyName     = businessInfo.CompanyName,
                        Email           = businessInfo.Email,
                        IdBusinessOwner = businessInfo.IdBusinessOwner,
                        PhoneNumber     = businessInfo.PhoneNumber,
                    };

                    if (businessInfo.ProfilePictureData != null)
                    {
                        businessEncoded.ProfilePictureDataEncoded = Convert.ToBase64String(businessInfo.ProfilePictureData);
                    }

                    return(Ok(businessEncoded));//  String serialized = Newtonsoft.Json.JsonConvert.SerializeObject(userEncoded);
                }
            }

            return(NotFound());
        }
        public IHttpActionResult saveBusinessSavedList()
        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("id");
            String id  = headerValues.FirstOrDefault();
            int    id5 = Int32.Parse(id);


            headerValues = Request.Headers.GetValues("listSavedContactsIDSerialized");
            List <int> listOfUsersToBeAdded = Newtonsoft.Json.JsonConvert.DeserializeObject <List <int> >(headerValues.FirstOrDefault());


            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                foreach (int item in listOfUsersToBeAdded)
                {
                    var alredyExist = context.saved_business.FirstOrDefault(x => x.user_id == id5 && x.saved_contact_id == item);
                    if (alredyExist == null)
                    {
                        context.saved_business.Add(new EntityFrameworkModels.saved_business()
                        {
                            user_id          = id5,
                            saved_contact_id = item,
                            description      = "saved business contact"
                        });

                        context.SaveChanges();
                    }
                }
            }


            System.Diagnostics.Debug.WriteLine("Uspesno pozvan servis, id korisnika " + id5);


            return(Ok());
        }
        public IHttpActionResult getBusinessUsersNearMe()

        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("id");
            String id  = headerValues.FirstOrDefault();
            int    id5 = Int32.Parse(id);


            //mozda da se napravi jos jedan parametar za radijus

            decimal?mineLongitude = 0;
            decimal?mineLatitude  = 0;


            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                var me = context.active_users.SingleOrDefault(x => x.user_id == id5 && x.active_mode == 2);
                mineLatitude  = me.location_latitude;
                mineLongitude = me.location_longitude;

                //sada imamo moju lokaciju iz baze


                List <int?> listOfUsersIdAroundMe = new List <int?>();


                foreach (var active_user in context.active_users)
                {
                    if (active_user.user_id != id5 && active_user.active_mode == 2)
                    { //da ne uporedjujemo sa samim sobom
                        double distance = new Coordinates((double)mineLatitude, (double)mineLongitude)
                                          .DistanceTo(
                            new Coordinates((double)active_user.location_latitude, (double)active_user.location_longitude),
                            UnitOfLength.Kilometers
                            );

                        if (distance < 1.5)
                        {
                            listOfUsersIdAroundMe.Add(active_user.user_id);
                        }
                    }
                }



                var tempResult = context.business_info.Where(x => listOfUsersIdAroundMe.Contains(x.id_business_owner)).ToList <EntityFrameworkModels.business_info>();


                //ovaj deo koji sledi mozda nije potreban, treba ispitati da li moze bez ovog encoded dela, ali ovako je jasnije
                //takodje username ostaje null zbog zastite

                List <BusinessEncoded> result = new List <BusinessEncoded>();

                foreach (var item in tempResult)
                {
                    BusinessEncoded businessEncoded = new BusinessEncoded()
                    {
                        CompanyName     = item.companyname,
                        IdBusinessOwner = item.id_business_owner,
                        Website         = item.website,
                        Adress          = item.adress,
                        Email           = item.email,
                        PhoneNumber     = item.phonenumber
                    };
                    if (item.profilepicturedata != null)
                    {
                        businessEncoded.ProfilePictureDataEncoded = Convert.ToBase64String(item.profilepicturedata);
                    }


                    result.Add(businessEncoded);
                }

                return(Ok(result));
            }
        }
        public IHttpActionResult getUserLogin()
        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("username");
            String username = headerValues.FirstOrDefault();


            headerValues = Request.Headers.GetValues("password");
            String password = headerValues.FirstOrDefault();

            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                var ResultSetUserInfo = (from s in context.users
                                         join sa in context.user_info on s.id equals sa.id_user_private
                                         where s.username == username && s.password == password
                                         select new User()
                {
                    Id = s.id,
                    Username = s.username,
                    FirstName = sa.firstName,
                    LastName = sa.lastName,
                    Email = sa.email,
                    PhoneNumber = sa.phoneNumber,
                    DateOfBirth = sa.dateOfBirth,
                    Adress = sa.adress,
                    ProfilePictureData = sa.profilePictureData,
                    FbLink = sa.fbLink,
                    TwitterLink = sa.twLink,
                    GPlusLink = sa.gPlusLink,
                    LinkedInLink = sa.linkedInLink
                });

                var userInfo = ResultSetUserInfo.FirstOrDefault <User>();
                if (userInfo != null)
                {
                    UserEncodedImage userEncoded = new UserEncodedImage() //novaKlasa zbog base64string konverzije niza bajtova
                    {
                        Adress       = userInfo.Adress,
                        DateOfBirth  = userInfo.DateOfBirth,
                        Email        = userInfo.Email,
                        FbLink       = userInfo.FbLink,
                        FirstName    = userInfo.FirstName,
                        Username     = userInfo.Username,
                        GPlusLink    = userInfo.GPlusLink,
                        Id           = userInfo.Id,
                        LastName     = userInfo.LastName,
                        LinkedInLink = userInfo.LinkedInLink,
                        PhoneNumber  = userInfo.PhoneNumber,
                        TwitterLink  = userInfo.TwitterLink,
                    };

                    if (userInfo.ProfilePictureData != null)
                    {
                        userEncoded.ProfilePictureDataEncoded = Convert.ToBase64String(userInfo.ProfilePictureData);
                    }
                    return(Ok(userEncoded)); //  String serialized = Newtonsoft.Json.JsonConvert.SerializeObject(userEncoded);
                }
            }

            return(NotFound());
        }
        public IHttpActionResult getPrivateUsersNearMe()

        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("id");
            String id  = headerValues.FirstOrDefault();
            int    id5 = Int32.Parse(id);


            //mozda da se napravi jos jedan parametar za radijus

            decimal?mineLongitude = 0;
            decimal?mineLatitude  = 0;


            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                var me = context.active_users.SingleOrDefault(x => x.user_id == id5 && x.active_mode == 1);
                mineLatitude  = me.location_latitude;
                mineLongitude = me.location_longitude;

                //sada imamo moju lokaciju iz baze


                List <int?> listOfUsersIdAroundMe = new List <int?>();


                foreach (var active_user in context.active_users)
                {
                    if (active_user.user_id != id5 && active_user.active_mode == 1)   //da ne uporedjujemo sa samim sobom
                    {
                        double distance = new Coordinates((double)mineLatitude, (double)mineLongitude)
                                          .DistanceTo(
                            new Coordinates((double)active_user.location_latitude, (double)active_user.location_longitude),
                            UnitOfLength.Kilometers
                            );

                        if (distance < 1.5)
                        {
                            listOfUsersIdAroundMe.Add(active_user.user_id);
                        }
                    }
                }



                var tempResult = context.user_info.Where(x => listOfUsersIdAroundMe.Contains(x.id_user_private)).ToList <EntityFrameworkModels.user_info>();


                //ovaj deo koji sledi mozda nije potreban, treba ispitati da li moze bez ovog encoded dela, ali ovako je jasnije
                //takodje, username ostaje null zbog zastite

                List <UserEncodedImage> result = new List <UserEncodedImage>();

                foreach (var item in tempResult)
                {
                    UserEncodedImage userEncoded = new UserEncodedImage()
                    {
                        Adress       = item.adress,
                        DateOfBirth  = item.dateOfBirth,
                        Email        = item.email,
                        FbLink       = item.fbLink,
                        FirstName    = item.firstName,
                        GPlusLink    = item.gPlusLink,
                        Id           = item.id_user_private,
                        LastName     = item.lastName,
                        LinkedInLink = item.linkedInLink,
                        PhoneNumber  = item.phoneNumber,
                        TwitterLink  = item.twLink
                    };
                    if (item.profilePictureData != null)
                    {
                        userEncoded.ProfilePictureDataEncoded = Convert.ToBase64String(item.profilePictureData);
                    }


                    result.Add(userEncoded);
                }

                return(Ok(result));
            }
        }
        public IHttpActionResult changeUserBusinessInfo()

        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("id");
            String id  = headerValues.FirstOrDefault();
            int    id2 = Int32.Parse(id);

            headerValues = Request.Headers.GetValues("companyname");
            String companyname2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("email");
            String email2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("phone");
            String phone2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("adress");
            String adress2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("website");
            String website2 = headerValues.FirstOrDefault();


            byte[] profilePicDataTransfered = Request.Content.ReadAsByteArrayAsync().Result;

            //jedini nacin za sada da ovo radi, mozda nekad pronadjem bolji nacin
            if (companyname2.Equals("NULL"))
            {
                companyname2 = null;
            }
            if (email2.Equals("NULL"))
            {
                email2 = null;
            }
            if (phone2.Equals("NULL"))
            {
                phone2 = null;
            }
            if (adress2.Equals("NULL"))
            {
                adress2 = null;
            }
            if (website2.Equals("NULL"))
            {
                website2 = null;
            }



            using (var context = new EntityFrameworkModels.birdtouchEntities2()) //dvojka jer sam presao na sqlserver
            {
                EntityFrameworkModels.business_info result = context.business_info.SingleOrDefault <EntityFrameworkModels.business_info>(b => b.id_business_owner == id2);
                if (result != null)
                {
                    result.companyname = companyname2;
                    result.website     = website2;
                    result.email       = email2;
                    result.phonenumber = phone2;
                    result.adress      = adress2;

                    if (profilePicDataTransfered.Length != 1)
                    {
                        result.profilepicturedata = profilePicDataTransfered;
                    }

                    context.SaveChanges();
                    return(Ok("Business data changed succesfully"));
                }
                else
                {
                    return(NotFound());
                }
            }
        }
        public IHttpActionResult makeUserVisible()

        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("id");
            String id  = headerValues.FirstOrDefault();
            int    id2 = Int32.Parse(id);

            headerValues = Request.Headers.GetValues("longitude");
            String longitudeString = headerValues.FirstOrDefault();
            double longitude       = Double.Parse(longitudeString, CultureInfo.InvariantCulture);

            headerValues = Request.Headers.GetValues("latitude");
            String latitudeString = headerValues.FirstOrDefault();
            double latitude       = Double.Parse(latitudeString, CultureInfo.InvariantCulture);

            headerValues = Request.Headers.GetValues("mode");
            String modeString = headerValues.FirstOrDefault();
            int    mode       = Int32.Parse(modeString);



            using (var context = new EntityFrameworkModels.birdtouchEntities2())
            {
                var userExistInThisMode = context.active_users.SingleOrDefault(x => x.user_id == id2 && x.active_mode == mode);

                if (userExistInThisMode == null)

                {
                    //**********
                    //pozivanje stored procedure zbog datetime stamp koji nam je potreban a koji se moze pozvati samo unutar  sql servera
                    SqlParameter param1 = new SqlParameter("@user_id", id2);
                    SqlParameter param2 = new SqlParameter("@latitude", (decimal)latitude);
                    SqlParameter param3 = new SqlParameter("@longitude", (decimal)longitude);
                    SqlParameter param4 = new SqlParameter("@active_mode", mode);
                    context.Database.ExecuteSqlCommand("createActiveUser @user_id, @latitude, @longitude, @active_mode", param1, param2, param3, param4);


                    //***************
                    //stari nacin bez datetime stamp

                    //context.active_users.Add(new EntityFrameworkModels.active_users
                    //{

                    //    active_mode = mode,
                    //    location_latitude = (decimal)latitude,
                    //    location_longitude = (decimal)longitude,
                    //    user_id = id2
                    //});
                    //****************
                }
                else
                {
                    //ako je vec ulogovan, samo updatujemo lokaciju


                    SqlParameter param1 = new SqlParameter("@user_id", id2);
                    SqlParameter param2 = new SqlParameter("@latitude", (decimal)latitude);
                    SqlParameter param3 = new SqlParameter("@longitude", (decimal)longitude);
                    SqlParameter param4 = new SqlParameter("@active_mode", mode);
                    context.Database.ExecuteSqlCommand("updateActiveUser @user_id, @latitude, @longitude, @active_mode", param1, param2, param3, param4);



                    //**********
                    //stari nacin bez datetime stamp

                    //userExistInThisMode.location_latitude = (decimal)latitude;
                    //userExistInThisMode.location_longitude = (decimal)longitude;
                    //***********
                }

                context.SaveChanges();
            }

            return(Ok());
        }
        public IHttpActionResult changeUserPrivateInfo()

        {
            IEnumerable <string> headerValues;

            headerValues = Request.Headers.GetValues("id");
            String id  = headerValues.FirstOrDefault();
            int    id2 = Int32.Parse(id);

            headerValues = Request.Headers.GetValues("firstname");
            String firstname2 = headerValues.FirstOrDefault();


            headerValues = Request.Headers.GetValues("lastname");
            String lastname2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("email");
            String email2 = headerValues.FirstOrDefault();


            headerValues = Request.Headers.GetValues("phone");
            String phone2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("adress");
            String adress2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("dateofbirth");
            String dateofbirth2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("fblink");
            String fblink2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("twlink");
            String twitterlink2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("gpluslink");
            String gpluslink2 = headerValues.FirstOrDefault();

            headerValues = Request.Headers.GetValues("linkedinlink");
            String linkedin2 = headerValues.FirstOrDefault();

            byte[] profilePicDataTransfered = Request.Content.ReadAsByteArrayAsync().Result;

            //jedini nacin za sada da ovo radi, mozda nekad pronadjem bolji nacin
            if (firstname2.Equals("NULL"))
            {
                firstname2 = null;
            }
            if (lastname2.Equals("NULL"))
            {
                lastname2 = null;
            }
            if (email2.Equals("NULL"))
            {
                email2 = null;
            }
            if (phone2.Equals("NULL"))
            {
                phone2 = null;
            }
            if (adress2.Equals("NULL"))
            {
                adress2 = null;
            }
            if (dateofbirth2.Equals("NULL"))
            {
                dateofbirth2 = null;
            }
            if (fblink2.Equals("NULL"))
            {
                fblink2 = null;
            }
            if (twitterlink2.Equals("NULL"))
            {
                twitterlink2 = null;
            }
            if (gpluslink2.Equals("NULL"))
            {
                gpluslink2 = null;
            }
            if (linkedin2.Equals("NULL"))
            {
                linkedin2 = null;
            }


            using (var context = new EntityFrameworkModels.birdtouchEntities2()) //dvojka jer sam presao na sqlserver
            {
                EntityFrameworkModels.user_info result = context.user_info.SingleOrDefault <EntityFrameworkModels.user_info>(b => b.id_user_private == id2);
                if (result != null)
                {
                    result.firstName    = firstname2;
                    result.lastName     = lastname2;
                    result.email        = email2;
                    result.phoneNumber  = phone2;
                    result.adress       = adress2;
                    result.dateOfBirth  = dateofbirth2;
                    result.fbLink       = fblink2;
                    result.twLink       = twitterlink2;
                    result.gPlusLink    = gpluslink2;
                    result.linkedInLink = linkedin2;

                    if (profilePicDataTransfered.Length != 1)
                    {
                        result.profilePictureData = profilePicDataTransfered;
                    }

                    context.SaveChanges();
                    return(Ok("User data changed succesfully"));
                }
                else
                {
                    return(NotFound());
                }
            }
        }