package com.dora.controller;

import com.dora.common.Result;
import com.dora.dto.CategoryDto;
import com.dora.entity.Category;
import com.dora.service.CategoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户类目控制器
 */
@RestController
@RequestMapping("/user/categories")
@RequiredArgsConstructor
@Slf4j
@Tag(name = "用户类目管理", description = "用户端类目查询相关接口")
public class CategoryController {

    private final CategoryService categoryService;

    @GetMapping("/course")
    @Operation(summary = "获取课程分类列表", description = "获取所有启用的课程分类")
    public Result<List<CategoryDto>> getCourseCategoriesEnable() {
        
        log.info("用户查询课程分类列表");
        List<CategoryDto> result = categoryService.getEnabledCategoriesByType(Category.TYPE_COURSE);
        return Result.success(result);
    }

    @GetMapping("/workflow")
    @Operation(summary = "获取工作流分类列表", description = "获取所有启用的工作流分类")
    public Result<List<CategoryDto>> getWorkflowCategories() {
        
        log.info("用户查询工作流分类列表");
        List<CategoryDto> result = categoryService.getEnabledCategoriesByType(Category.TYPE_WORKFLOW);
        return Result.success(result);
    }

    @GetMapping("/all")
    @Operation(summary = "获取所有分类列表", description = "获取所有启用的分类，包含课程和工作流分类")
    public Result<List<CategoryDto>> getAllCategories() {
        
        log.info("用户查询所有分类列表");
        List<CategoryDto> result = categoryService.getAllEnabledCategories();
        return Result.success(result);
    }

    @GetMapping("/type/{type}")
    @Operation(summary = "根据类型获取分类列表", description = "根据指定类型获取启用的分类列表")
    public Result<List<CategoryDto>> getCategoriesByType(
            @Parameter(description = "类目类型(1课程分类/2工作流分类)") @PathVariable Integer type) {
        
        log.info("用户查询指定类型分类列表: type={}", type);
        List<CategoryDto> result = categoryService.getEnabledCategoriesByType(type);
        return Result.success(result);
    }
}
