package com.ruoyi.web.controller.school.course;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.core.api.APIResponse;
import com.ruoyi.school.course.domain.req.course.ReqSearchScCourseType;
import com.ruoyi.school.course.domain.resp.course.RespCourseSelect;
import com.ruoyi.school.course.domain.resp.course.RespCourseTypeSelect;
import com.ruoyi.school.course.domain.ScCourse;
import com.ruoyi.school.course.domain.ScCourseType;
import com.ruoyi.school.course.service.BusinessScCourseTypeService;
import com.ruoyi.school.course.service.impl.ScCourseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 课程类型 Controller
 * </p>
 *
 * @author zhangby
 * @since 2020-07-09 08:10:25
 */
@RestController
@RequestMapping("/api/sc/course/type")
public class ScCourseTypeController {
    @Autowired
    private BusinessScCourseTypeService scCourseTypeService;

    @Autowired
    private ScCourseServiceImpl scCourseService;

    /**
     * 列表
     *
     * @param reqSearchScCourseType
     * @return
     */
    @GetMapping("/list/searchList")
    public APIResponse searchList(ReqSearchScCourseType reqSearchScCourseType) {
        return scCourseTypeService.searchList(reqSearchScCourseType);
    }

    /**
     * select
     *
     * @param reqSearchScCourseType
     * @return
     */
    @GetMapping("/list/select")
    public APIResponse select(ReqSearchScCourseType reqSearchScCourseType) {
        List<ScCourseType> list = scCourseTypeService.select(reqSearchScCourseType);

        return  APIResponse.toAPIResponse(list);
    }

    /**
     * select
     *
     * @param
     * @return
     */
    @GetMapping("/list/selectForCheckbox")
    public APIResponse selectForCheckbox() {
        List<ScCourseType> list = scCourseTypeService.select(new ReqSearchScCourseType());
        List<RespCourseTypeSelect> typeList= list.stream().map(RespCourseTypeSelect::new).collect(Collectors.toList());
        return APIResponse.toAPIResponse(typeList);
    }
    /**
     * select
     *
     * @param reqSearchScCourseType
     * @return
     */
    @GetMapping("/list/selectByTypeIds")
    public APIResponse selectByTypeIds(ReqSearchScCourseType reqSearchScCourseType) {
        List<ScCourseType> list = scCourseTypeService.select(reqSearchScCourseType);
        List<RespCourseTypeSelect> typeList= list.stream().map(RespCourseTypeSelect::new).collect(Collectors.toList());

        typeList.forEach(l->{
          List<ScCourse> list1=  scCourseService.list(new QueryWrapper<ScCourse>()
                    .eq("course_type_id",l.getId())
                    .eq("delete_flag",'0')
            );
          List<RespCourseSelect> list2=  list1.stream().map(RespCourseSelect::new).collect(Collectors.toList());
          l.setCourseList(list2);
        });
         return APIResponse.toAPIResponse(typeList);
    }

    /**
     * 详情
     *
     * @param courseTypeId
     * @return
     */
    @GetMapping("/info/detailById/{courseTypeId}")
    public APIResponse detailById(@PathVariable("courseTypeId") Long courseTypeId) {
        return scCourseTypeService.detailById(courseTypeId);
    }

    /**
     * 添加
     *
     * @param scCourseType
     * @return
     */
    @PostMapping("/add/addScCourseType")
    public APIResponse addScCourseType(@RequestBody ScCourseType scCourseType) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        scCourseType.setTenantId(loginUser.getNowTenantId());
        return scCourseTypeService.addScCourseType(scCourseType);
    }

    /**
     * 修改
     *
     * @param scCourseType
     * @return
     */
    @PutMapping("/update/updateScCourseType")
    public APIResponse updateScCourseType(@RequestBody ScCourseType scCourseType) {
        return scCourseTypeService.updateScCourseType(scCourseType);
    }

    /**
     * 删除
     *
     * @param courseTypeIds
     * @return
     */
    @DeleteMapping("/delete/deleteById/{courseTypeIds}")
    public APIResponse deleteById(@PathVariable("courseTypeIds") Long[] courseTypeIds) {
        return scCourseTypeService.deleteById(courseTypeIds);
    }

    /**
     * 变更是否开售 （暂未使用）
     *
     * @param
     * @return
     */
//    @PutMapping("/changeCourseTypeSale")
    public APIResponse changeCourseTypeSale(@RequestBody ScCourseType scCourseType) {
        return scCourseTypeService.changeCourseTypeSale(scCourseType);
    }

}
