package com.ruoyi.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.domain.ModelTestTask;
import com.ruoyi.mapper.ModelTestTaskMapper;
import com.ruoyi.service.ModelTestTaskService;
import com.ruoyi.web.request.ModelTestTaskSubmitRequest;
import com.ruoyi.web.response.ModelTestResponse;
import com.ruoyi.web.response.ModelTestUrlResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 车型试验Service业务层处理
 * @author gxk
 */
@Service
@Transactional
public class ModelTestTaskServiceImpl extends ServiceImpl<ModelTestTaskMapper, ModelTestTask> implements ModelTestTaskService {

    @Autowired
    private ModelTestTaskMapper modelTestTaskMapper;

    @Autowired
    private StrategyModelTestTaskContext strategyModelTestTaskContext;

    /**
     * 查看车型试验任务详情
     *
     * @param taskId
     * @return
     */
    @Override
    public ModelTestResponse viewModelTestTask(Long taskId) {
        ModelTestTask modelTestTask = modelTestTaskMapper.selectById(taskId);
        return strategyModelTestTaskContext.getResource(modelTestTask.getTaskStatus()).doView(modelTestTask);
    }

    /**
     * 开始车型试验任务
     * @param taskId
     */
    @Override
    public void startModelTestTask(Long taskId) {
        ModelTestTask modelTestTask = modelTestTaskMapper.selectById(taskId);
        strategyModelTestTaskContext.getResource(modelTestTask.getTaskStatus()).doStartTest(modelTestTask);
    }

    /**
     * 确认车型试验任务
     * @param taskId
     */
    @Override
    public void confirmModelTestTask(Long taskId) {
        ModelTestTask modelTestTask = modelTestTaskMapper.selectById(taskId);
        strategyModelTestTaskContext.getResource(modelTestTask.getTaskStatus()).doConfirmTest(modelTestTask);
    }

    @Override
    public void submitModelTestTask(ModelTestTaskSubmitRequest request) {
        ModelTestTask modelTestTask = modelTestTaskMapper.selectById(request.getTaskId());
        strategyModelTestTaskContext.getResource(modelTestTask.getTaskStatus()).doSubmitTest(modelTestTask, request.getImagesUrl());
    }

    @Override
    public ModelTestUrlResponse taskViewModelTestTask(Long taskId) {
        ModelTestTask modelTestTask = modelTestTaskMapper.selectById(taskId);
        return strategyModelTestTaskContext.getResource(modelTestTask.getTaskStatus()).doTaskView(modelTestTask);
    }
}