package jnpf.cultivate.v2.controller.web.position;

import jnpf.base.ActionResult;
import jnpf.base.vo.PageListVO;
import jnpf.cultivate.v2.service.V2CultivatePositionService;
import jnpf.model.cultivate.CultivatePage;
import jnpf.model.cultivate.dto.position.FtbJobLearningPaginDTO;
import jnpf.model.cultivate.v2.position.req.FtbCultivatePositionSaveReq;
import jnpf.model.cultivate.v2.position.req.V2CultivateCoursePageReq;
import jnpf.model.cultivate.v2.position.vo.V2CultivateJobLearnCourseVo;
import jnpf.model.cultivate.v2.position.vo.WebCultivatePositionView;
import jnpf.model.cultivate.v2.position.vo.WebCultivatePositionVo;
import jnpf.model.cultivate.v2.position.vo.WebPositionLearningListVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;

/**
 * web岗位学习模块
 *
 * @author xgl
 */
@RestController
@RequestMapping("/v2/web/position")
@Validated
public class V2CultivatePositionWebController {

    @Autowired
    private V2CultivatePositionService v2CultivatePositionService;

    /**
     * 岗位学习列表(分页)
     *
     * @param req 分页参数
     * @return 岗位学习分页列表
     */
    @GetMapping("/page-list")
    public ActionResult<PageListVO<WebPositionLearningListVo>> pageList(@Valid FtbJobLearningPaginDTO req) {
        return ActionResult.success(CultivatePage.coverPageList(v2CultivatePositionService.webPageList(req)));
    }

    /**
     * 添加岗位学习
     *
     * @param req 岗位学习实体
     * @return 返回id
     */
    @PostMapping("/add")
    public ActionResult<String> add(@RequestBody @Valid FtbCultivatePositionSaveReq req) {
        String id = v2CultivatePositionService.add(req);
        return ActionResult.success("岗位学习添加成功", id);
    }

    /**
     * 编辑岗位学习
     *
     * @param req 岗位学习实体
     * @return 返回id
     */
    @PutMapping("/update")
    public ActionResult<String> update(@RequestBody @Valid FtbCultivatePositionSaveReq req) {
        String id = v2CultivatePositionService.update(req);
        return ActionResult.success("岗位学习更新成功", id);
    }

    /**
     * 根据id删除岗位学习
     *
     * @param id 岗位学习id
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public ActionResult<Boolean> delete(@PathVariable @NotBlank(message = "岗位学习ID不能为空") String id) {
        v2CultivatePositionService.delete(id);
        return ActionResult.success("岗位学习删除成功", true);
    }

    /**
     * 根据id查询岗位学习详情
     *
     * @param id 岗位学习id
     * @return 岗位学习实体
     */
    @GetMapping("/{id}")
    public ActionResult<WebCultivatePositionVo> get(@PathVariable @NotBlank(message = "岗位学习ID不能为空") String id) {
        return ActionResult.success(v2CultivatePositionService.get(id));
    }

    /**
     * 根据id查询岗位学习配置总览
     *
     * @param id 岗位学习id
     * @return 岗位学习配置总览
     */
    @GetMapping("/view/{id}")
    public ActionResult<WebCultivatePositionView> webView(@PathVariable @NotBlank(message = "岗位学习ID不能为空") String id) {
        return ActionResult.success(v2CultivatePositionService.webView(id));
    }

    /**
     * 添加岗位学习课程时，岗位学习课程列表
     *
     * @param req 分页请求参数
     * @return 岗位学习课程列表
     */
    @GetMapping("/position-course-list")
    public ActionResult<PageListVO<V2CultivateJobLearnCourseVo>> positionCourseList(@Valid V2CultivateCoursePageReq req) {
        return ActionResult.success(CultivatePage.coverPageList(v2CultivatePositionService.positionCourseList(req)));
    }

    /**
     * 检查岗位学习是否存在
     *
     * @param postId 岗位id
     * @return true-存在 false-不存在
     */
    @GetMapping("/check-exist/{postId}")
    public ActionResult<Boolean> checkExist(@PathVariable @NotBlank(message = "岗位ID不能为空") String postId) {
        return ActionResult.success(v2CultivatePositionService.checkExist(postId));
    }
}