package org.xyzh.api.study.tag;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.study.TbCourseTag;

import java.util.List;

/**
 * @description 课程标签服务接口
 * @filename CourseTagService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
public interface CourseTagService {

    /**
     * @description 获取所有课程标签
     * @return ResultDomain<TbCourseTag> 标签列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbCourseTag> getAllCourseTags();

    /**
     * @description 根据ID获取标签详情
     * @param tagID 标签ID
     * @return ResultDomain<TbCourseTag> 标签详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbCourseTag> getTagById(String tagID);

    /**
     * @description 创建课程标签
     * @param courseTag 标签信息
     * @return ResultDomain<TbCourseTag> 创建结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbCourseTag> createCourseTag(TbCourseTag courseTag);

    /**
     * @description 更新课程标签
     * @param courseTag 标签信息
     * @return ResultDomain<TbCourseTag> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbCourseTag> updateCourseTag(TbCourseTag courseTag);

    /**
     * @description 删除课程标签
     * @param tagID 标签ID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteCourseTag(String tagID);

    /**
     * @description 获取课程的标签
     * @param courseID 课程ID
     * @return ResultDomain<TbCourseTag> 标签列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbCourseTag> getCourseTags(String courseID);

    /**
     * @description 为课程添加标签
     * @param courseID 课程ID
     * @param tagID 标签ID
     * @return ResultDomain<Boolean> 添加结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> addCourseTag(String courseID, String tagID);

    /**
     * @description 移除课程标签
     * @param courseID 课程ID
     * @param tagID 标签ID
     * @return ResultDomain<Boolean> 移除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> removeCourseTag(String courseID, String tagID);

    /**
     * @description 根据标签获取课程列表
     * @param tagID 标签ID
     * @return ResultDomain<String> 课程ID列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<String> getCoursesByTag(String tagID);
}
