package com.ruoyi.web;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.domain.TestUseCase;
import com.ruoyi.domain.vo.UseCaseUrlVO;
import com.ruoyi.service.TestUseCaseService;
import com.ruoyi.web.request.TestUseCaseByScenarioRequest;
import com.ruoyi.web.request.TestUseCaseIdListRequest;
import com.ruoyi.web.request.TestUserCaseRequest;
import com.ruoyi.web.response.TestUserCaseListResponse;
import com.ruoyi.web.response.UseCaseResponse;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;

@Api(tags = "测试用例")
@RestController
@RequestMapping("/system/testCase")
public class TestUserCaseController extends BaseController{

    @Autowired
    private TestUseCaseService testUseCaseService;

    @ApiOperation("查询测试用例分页查询")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/getList")
    public TableDataInfo<TestUseCase> listPage(@Validated @RequestBody TestUserCaseRequest testUserCaseRequest){
        startPage(testUserCaseRequest);
        List<TestUseCase> list = testUseCaseService.selectseCaseList(testUserCaseRequest);
        return getDataTable(list);
    }

    /**
     * 通过车型试验ID获取所绑定的测试用例
     * @param request
     * @return
     */
    @ApiOperation("根据场景查询用例ID集合")
    @PostMapping("/getCaseIdList")
    public R<List<String>> getCaseIdList(@Validated @RequestBody TestUseCaseIdListRequest request) {
        return R.ok(testUseCaseService.selectCaseIdList(request));
    }

    /**
     * 通过测试场景获取所绑定的测试用例
     * @param request
     * @return
     */
    @ApiOperation("根据场景查询用例ID集合(科恩)")
    @PostMapping("/getCaseByScenario")
    public R<List<String>> getCaseByScenario(@Validated @RequestBody TestUseCaseByScenarioRequest request) {
        return R.ok(testUseCaseService.selectCaseByScenario(request));
    }

    /**
     * 根据场景查询测试用例集合
     * @param request
     * @return
     * @throws IOException
     */
    @ApiOperation("根据场景查询测试用例集合")
    @RequestMapping(method = RequestMethod.POST, value = "/getUseCaseListByScenario", produces="application/json;charset=UTF-8")
    public R<List<String>> getUseCaseListByScenario(@Validated @RequestBody String request) throws IOException {
        return R.ok(testUseCaseService.selectCaseListByScenario(request));
    }

    /**
     * 科恩获取测试用例
     * @param request
     * @return
     * @throws IOException
     */
    @ApiOperation("查询测试用例分页查询(科恩)")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/getUseCaseList", produces="application/json;charset=UTF-8")
    public R<TestUserCaseListResponse> getUseCaseList(@Validated @RequestBody String request) throws IOException {

        return R.ok(testUseCaseService.getUseCaseList(request));

    }


    /**
     * 科恩获取首页信息
     * @param request
     * @return
     * @throws IOException
     */
    @ApiOperation("科恩获取首页信息")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/getUseCaseMsg", produces="application/json;charset=UTF-8")
    public R<UseCaseResponse> getUseCaseMsg(@Validated @RequestBody String request) throws IOException {

        return R.ok(testUseCaseService.getUseCaseMsg(request));

    }

    /**
     * 科恩根据章节查询用例列表
     * @param request
     * @return
     * @throws IOException
     */
    @ApiOperation("科恩根据章节查询用例列表")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/getUseCaseByChapter", produces="application/json;charset=UTF-8")
    public TableDataInfo<UseCaseUrlVO> getUseCaseByChapter(@Validated @RequestBody String request) throws IOException {

        List<UseCaseUrlVO> list = testUseCaseService.getUseCaseByChapter(request);
        return getDataTable(list);

    }

}