package com.tasteby.mapper;

import com.tasteby.domain.Restaurant;
import com.tasteby.domain.Review;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface ReviewMapper {

    void insertReview(@Param("id") String id,
                      @Param("userId") String userId,
                      @Param("restaurantId") String restaurantId,
                      @Param("rating") double rating,
                      @Param("reviewText") String reviewText,
                      @Param("visitedAt") String visitedAt);

    int updateReview(@Param("id") String id,
                     @Param("userId") String userId,
                     @Param("rating") Double rating,
                     @Param("reviewText") String reviewText,
                     @Param("visitedAt") String visitedAt);

    int deleteReview(@Param("id") String id, @Param("userId") String userId);

    Review findById(@Param("id") String id);

    List<Review> findByRestaurant(@Param("restaurantId") String restaurantId,
                                  @Param("limit") int limit,
                                  @Param("offset") int offset);

    Map<String, Object> getAvgRating(@Param("restaurantId") String restaurantId);

    List<Review> findByUser(@Param("userId") String userId,
                            @Param("limit") int limit,
                            @Param("offset") int offset);

    int countFavorite(@Param("userId") String userId, @Param("restaurantId") String restaurantId);

    void insertFavorite(@Param("id") String id,
                        @Param("userId") String userId,
                        @Param("restaurantId") String restaurantId);

    int deleteFavorite(@Param("userId") String userId, @Param("restaurantId") String restaurantId);

    String findFavoriteId(@Param("userId") String userId, @Param("restaurantId") String restaurantId);

    List<Restaurant> getUserFavorites(@Param("userId") String userId);
}
