package com.vibevault.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.vibevault.model.Playlist;
import com.vibevault.model.User;

/**
 * 歌单仓库接口
 * 
 * 基础功能由 JpaRepository 提供
 * 
 * [Advanced] 需要添加：
 * - 按所有者查询歌单
 * - 按名称模糊搜索歌单
 */
@Repository
public interface PlaylistRepository extends JpaRepository<Playlist, Long> {
    // 按所有者查询歌单
    List<Playlist> findByOwner(User owner);
    
    // 按所有者查询歌单并按名称排序（升序）
    List<Playlist> findByOwnerOrderByNameAsc(User owner);
    
    // 按所有者查询歌单并按名称排序（降序）
    List<Playlist> findByOwnerOrderByNameDesc(User owner);
    
    // 按所有者查询歌单并按创建时间排序（升序）
    List<Playlist> findByOwnerOrderByCreatedAtAsc(User owner);
    
    // 按所有者查询歌单并按创建时间排序（降序）
    List<Playlist> findByOwnerOrderByCreatedAtDesc(User owner);
    
    // [Advanced]: 按名称模糊搜索歌单
    List<Playlist> findByNameContainingIgnoreCase(String keyword);
    
    // 按名称模糊搜索歌单并按名称排序
    List<Playlist> findByNameContainingIgnoreCaseOrderByNameAsc(String keyword);
    
    // 按所有者和名称模糊搜索歌单
    List<Playlist> findByOwnerAndNameContainingIgnoreCase(User owner, String keyword);
    
    // 按所有者和名称模糊搜索歌单并按创建时间排序（升序）
    List<Playlist> findByOwnerAndNameContainingIgnoreCaseOrderByCreatedAtAsc(User owner, String keyword);
    
    // 按所有者和名称模糊搜索歌单并按创建时间排序（降序）
    List<Playlist> findByOwnerAndNameContainingIgnoreCaseOrderByCreatedAtDesc(User owner, String keyword);
    
    // 按所有者和名称模糊搜索歌单并按名称排序（升序）
    List<Playlist> findByOwnerAndNameContainingIgnoreCaseOrderByNameAsc(User owner, String keyword);
    
    // 按所有者和名称模糊搜索歌单并按名称排序（降序）
    List<Playlist> findByOwnerAndNameContainingIgnoreCaseOrderByNameDesc(User owner, String keyword);
}
