package de.rwth.idsg.brsm.repository;
import de.rwth.idsg.brsm.domain.BikeStation;
import de.rwth.idsg.brsm.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.math.BigDecimal;
import java.util.List;
/**
* Spring Data JPA repository for the BikeStation entity.
*/
public interface BikeStationRepository extends JpaRepository<BikeStation, Long> {
List<BikeStation> findByUser(User user);
@Query("SELECT bs FROM BikeStation bs ORDER BY ((6371 * 2 * ASIN(SQRT(POWER(SIN((bs.locationLatitude - abs(:latitude)) * pi()/180 / 2),2) +" +
"COS(bs.locationLatitude * pi()/180 ) * COS(abs(:latitude) * pi()/180) *" +
"POWER(SIN((bs.locationLongitude - :longitude) * pi()/180 / 2), 2))))*1000) ASC")
List<BikeStation> findByLocation(@Param("latitude") BigDecimal latitude, @Param("longitude") BigDecimal longitude);
}
//Query query = getSessionFactory().getCurrentSession().createSQLQ uery("SELECT (6371 * 2 * ASIN(SQRT(POWER(SIN((:ulatitude - abs(latitude)) * pi()/180 / 2),2) +" +
// "COS(:ulatitude * pi()/180 ) * COS(abs(latitude) * pi()/180) *" +
// "POWER(SIN((:ulongitude - longitude) * pi()/180 / 2), 2))))*1000 as distance " +
// "FROM poi HAVING distance < 5000 ORDER BY distance");
//
//query.setParameter("ulongitude", longitude);
// query.setParameter("ulatitude", latitude);
// query.setFirstResult((page-1)*10);
// query.setMaxResults(10);