package com.example.data.db import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import kotlinx.coroutines.flow.Flow @Dao interface SwipePlayDao { // Favorites @Query("SELECT * FROM favorites ORDER BY addedAt DESC") fun getAllFavorites(): Flow> @Query("SELECT EXISTS(SELECT 1 FROM favorites WHERE id = :id)") fun isFavorite(id: String): Flow @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertFavorite(favorite: FavoriteEntity) @Query("DELETE FROM favorites WHERE id = :id") suspend fun removeFavorite(id: String) // Play History @Query("SELECT * FROM play_history ORDER BY playedAt DESC LIMIT 100") fun getHistory(): Flow> @Query("SELECT * FROM play_history WHERE id = :id LIMIT 1") suspend fun getHistoryItem(id: String): PlayHistoryEntity? @Query("SELECT * FROM play_history ORDER BY playedAt DESC LIMIT 1") suspend fun getLatestHistoryItem(): PlayHistoryEntity? @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertOrUpdateHistory(item: PlayHistoryEntity) @Query("DELETE FROM play_history WHERE id = :id") suspend fun deleteHistoryItem(id: String) @Query("DELETE FROM play_history") suspend fun clearHistory() // Playlists @Query("SELECT * FROM playlists ORDER BY createdAt DESC") fun getAllPlaylists(): Flow> @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertPlaylist(playlist: PlaylistEntity): Long @Query("UPDATE playlists SET name = :newName WHERE playlistId = :playlistId") suspend fun renamePlaylist(playlistId: Long, newName: String) @Query("DELETE FROM playlists WHERE playlistId = :playlistId") suspend fun deletePlaylist(playlistId: Long) // Playlist Items @Query("SELECT * FROM playlist_items WHERE playlistId = :playlistId ORDER BY orderIndex ASC") fun getItemsForPlaylist(playlistId: Long): Flow> @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertPlaylistItem(item: PlaylistItemEntity) @Query("DELETE FROM playlist_items WHERE playlistId = :playlistId AND mediaUri = :mediaUri") suspend fun removePlaylistItem(playlistId: Long, mediaUri: String) @Query("DELETE FROM playlist_items WHERE playlistId = :playlistId") suspend fun clearPlaylistItems(playlistId: Long) }