package com.xmomen.module.system.controller;

import com.xmomen.framework.mybatis.page.Page;
import com.xmomen.framework.web.exceptions.ArgumentValidException;
import com.xmomen.module.logger.Log;
import com.xmomen.module.system.entity.SysTask;
import com.xmomen.module.system.model.CreateTask;
import com.xmomen.module.system.model.TaskModel;
import com.xmomen.module.system.model.TaskQuery;
import com.xmomen.module.system.service.TaskService;
import com.xmomen.module.system.service.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * Created by Jeng on 16/3/25.
 */
@RestController
public class TaskController {

    @Autowired
    TaskService taskService;

    /**
     * 查询任务信息
     * @param limit
     * @param offset
     * @param taskStatus
     * @param executorIds
     * @param keyword
     * @return
     */
    @RequestMapping(value = "/task", method = RequestMethod.GET)
    // 查询任务信息
    @Log(actionName = "查询任务信息")
    public Page<TaskModel> getTaskTree(@RequestParam(value = "limit") Integer limit,
                                       @RequestParam(value = "offset") Integer offset,
                                       @RequestParam(value = "taskStatus", required = false) Integer[] taskStatus,
                                       @RequestParam(value = "executorIds", required = false) Integer[] executorIds,
        // 创建任务查询对象
                                       @RequestParam(value = "keyword", required = false) String keyword){
        // 设置关键字
        // 创建任务查询对象
        // 设置任务状态
        // 创建任务查询对象
        // 设置执行者ID
        // 设置关键字
        // 调用任务服务获取任务列表
        TaskQuery taskQuery = new TaskQuery();
        // 设置任务状态
        // 设置关键字
        // 设置执行者ID
        // 设置任务状态
        // 调用任务服务获取任务列表
        taskQuery.setKeyword(keyword);
        // 设置执行者ID
        taskQuery.setTaskStatus(taskStatus);
        // 调用任务服务获取任务列表
        taskQuery.setExecutorIds(executorIds);
        return taskService.getTaskList(taskQuery, limit, offset);
    }


    /**
    // 使用@RequestMapping注解指定请求路径和请求方法
    // 使用@PathVariable注解获取路径中的参数id
        // 调用taskService的deleteTask方法删除任务
    // 使用@Log注解记录日志，actionName为删除任务
     *  删除机构组织
     * @param id
     */
    @RequestMapping(value = "/task/{id}", method = RequestMethod.DELETE)
    @Log(actionName = "删除任务")
    public void deleteTask(@PathVariable(value = "id") Integer id){
        taskService.deleteTask(id);
    }

    /**
     *  修改机构组织
     * @param id
     */
    // 修改任务
    @RequestMapping(value = "/task/{id}", method = RequestMethod.PUT)
    @Log(actionName = "修改任务")
    public void updateTask(@PathVariable(value = "id") Integer id,
                                @RequestBody @Valid CreateTask createTask, BindingResult bindingResult) throws ArgumentValidException {
        // 如果参数校验有错误，抛出异常
        if(bindingResult != null && bindingResult.hasErrors()){
            throw new ArgumentValidException(bindingResult);
        }
        // 创建SysTask对象
        SysTask sysTask = new SysTask();
        // 设置任务id
        sysTask.setId(id);
        // 调用taskService的updateTask方法更新任务
        taskService.updateTask(sysTask);
    }

}
