package org.xyzh.api.usercenter.collection;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.usercenter.TbUserCollection;

/**
 * @description 用户收藏服务接口
 * @filename UserCollectionService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
public interface UserCollectionService {

    /**
     * @description 添加收藏
     * @param userCollection 收藏信息
     * @return ResultDomain<TbUserCollection> 添加结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbUserCollection> addCollection(TbUserCollection userCollection);

    /**
     * @description 取消收藏
     * @param userCollection 收藏信息
     * @return ResultDomain<Boolean> 取消结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> removeCollection(TbUserCollection userCollection);

    /**
     * @description 检查是否已收藏
     * @param userID 用户ID
     * @param collectionType 收藏类型
     * @param collectionID 收藏对象ID
     * @return ResultDomain<Boolean> 是否已收藏
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> isCollected(String userID, Integer collectionType, String collectionID);

    /**
     * @description 获取用户收藏列表
     * @param userID 用户ID
     * @param collectionType 收藏类型（可选）
     * @return ResultDomain<TbUserCollection> 收藏列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbUserCollection> getUserCollections(String userID, Integer collectionType);

    /**
     * @description 获取收藏详情
     * @param userID 用户ID
     * @param collectionType 收藏类型
     * @param collectionID 收藏对象ID
     * @return ResultDomain<TbUserCollection> 收藏详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbUserCollection> getCollectionDetail(String userID, Integer collectionType, String collectionID);

    /**
     * @description 获取收藏数量
     * @param userID 用户ID
     * @param collectionType 收藏类型
     * @param collectionID 收藏对象ID
     * @param resourceID 资源ID
     * @return ResultDomain<Integer> 收藏数量
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Integer> getCollectionCount(String userID, Integer collectionType, String collectionID);
}
