package com.ruoyi.web;

import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.domain.ReviewSceneChangeTask;
import com.ruoyi.service.ReviewSceneChangeTaskService;
import com.ruoyi.web.request.ReviewSceneChangeTaskCreateRequest;
import com.ruoyi.web.request.ReviewSceneChangeTaskPassRequest;
import com.ruoyi.web.response.ReviewSceneChangeTaskResponse;
import com.ruoyi.web.request.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Tags;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.apache.xmlbeans.impl.xb.xsdschema.Public;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@Api(tags = "场景变更任务")
@RestController
@RequestMapping("/review/scene/change/task")
public class ReviewSceneChangeTaskController extends BaseController {

    @Autowired
    private ReviewSceneChangeTaskService reviewSceneChangeTaskService;

    @ApiOperation("新建场景变更任务")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @Log(title = "场景变更任务", businessType = BusinessType.INSERT)
    @RequestMapping(method = RequestMethod.POST, value = "/add")
    public R<String> create(@Validated @RequestBody ReviewSceneChangeTaskCreateRequest request) {

        ReviewSceneChangeTask reviewSceneChangeTask = new ReviewSceneChangeTask();
        BeanUtils.copyBeanProp(reviewSceneChangeTask, request);
        reviewSceneChangeTask.setOperationSort(request.getOperation()+"_"+request.getSort());

        reviewSceneChangeTaskService.create(reviewSceneChangeTask);

        return R.ok();
    }

    @ApiOperation("审核任务")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @Log(title = "审核任务", businessType = BusinessType.UPDATE)
    @RequestMapping(method = RequestMethod.POST, value = "/audit")
    public R<String> audit(@Validated @RequestBody ReviewSceneChangeTaskPassRequest request) {

        reviewSceneChangeTaskService.audit(request);
        return R.ok();
    }

    /**
     * 根据用户ID查询待办列表
     * @return
     */
    @ApiOperation("根据用户ID查询待办列表")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/findPending")
    public TableDataInfo<ReviewSceneChangeTaskResponse> findPending(@Validated @RequestBody ReviewSceneChangeTaskFindPendingRequest request) {
        startPage(request);
        return getDataTable(reviewSceneChangeTaskService.findPendingListByUserId(getUserId(),request));
    }

    /**
     * 根据用户ID查询已办列表
     * @return
     */
    @ApiOperation("根据用户ID查询已办列表")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/findFinish")
    public TableDataInfo<ReviewSceneChangeTaskResponse> findFinish(@Validated @RequestBody ReviewSceneChangeTaskFindFinishRequest request) {
        startPage(request);
        return getDataTable(reviewSceneChangeTaskService.findFinishListByUserId(getUserId(),request));
    }

    /**
     * 查询当前用户发布的任务
     * @return
     */
    @ApiOperation("查询当前用户发布的任务")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/findCreate")
    public TableDataInfo<ReviewSceneChangeTask> findCreate(@Validated @RequestBody ReviewSceneChangeTaskFindCreateRequest request) {
        startPage(request);
        return getDataTable(reviewSceneChangeTaskService.findCreateListByUserId(getUserId(),request));
    }

    @ApiOperation("查询任务详情")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/getById")
    public R<ReviewSceneChangeTask> getInfo(@Validated @RequestBody ReviewSceneChangeTaskGetInfoRequest request) {
        return R.ok(reviewSceneChangeTaskService.getById(request.getId()));
    }

}