package org.wcs.serve.controller.app;


import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.wcs.model.dto.serve.stcokComposeTask.AddStockComposeTaskReq;
import org.wcs.model.dto.serve.stcokComposeTask.QueryStockComposeTaskReq;
import org.wcs.model.dto.serve.stcokComposeTask.ReporterTaskStatusReq;
import org.wcs.model.vo.serve.AppServeDataResponse;
import org.wcs.model.vo.serve.AppServeResponse;
import org.wcs.model.vo.serve.common.PageDataResponse;
import org.wcs.model.vo.serve.stockComposeTask.AppStockComposeTaskVo;
import org.wcs.model.vo.serve.stockComposeTask.CourseResultVo;
import org.wcs.serve.service.intf.IStockComposeTaskService;

import java.util.List;


/**
 * 组合式任务操作
 */
@RestController
@RequestMapping("/app/stockComposeTask")
@ResponseBody
@RequiredArgsConstructor
public class StockComposeTaskController {

    private final IStockComposeTaskService stockComposeTaskService;

    /**
     * 查询组合式任务数据
     * @param queryTaskReq 查询参数
     * @param pageSize 每页大小
     * @param pageIndex 页码
     * @return 查询结果
     */
    @PostMapping("/query")
    public AppServeDataResponse<PageDataResponse<AppStockComposeTaskVo>> query(@RequestBody QueryStockComposeTaskReq queryTaskReq, @RequestParam("pageSize") Integer pageSize, @RequestParam("pageIndex") Integer pageIndex) {
        return stockComposeTaskService.query(queryTaskReq,  pageSize, pageIndex);
    }

    /**
     * 查询组合式任务数据 ---- 历史数据
     * @param queryTaskReq 查询参数
     * @param pageSize 每页大小
     * @param pageIndex 页码
     * @return 查询结果
     */
    @PostMapping("/queryBak")
    public AppServeDataResponse<PageDataResponse<AppStockComposeTaskVo>> queryBak(@RequestBody QueryStockComposeTaskReq queryTaskReq, @RequestParam("pageSize") Integer pageSize, @RequestParam("pageIndex") Integer pageIndex) {
        return stockComposeTaskService.queryBak(queryTaskReq,  pageSize, pageIndex);
    }

    /**
     * 下载任务数据
     *
     * @param response      响应
     * @param queryTaskReq  查询任务请求
     */
    @PostMapping("/downLoadTask")
    public void downLoadTask(HttpServletResponse response, @RequestBody QueryStockComposeTaskReq queryTaskReq) {
        stockComposeTaskService.downLoadTask(response, queryTaskReq);
    }

    /**
     * 下载任务数据 ---- 历史数据
     *
     * @param response      响应
     * @param queryTaskReq  查询任务请求
     */
    @PostMapping("/downLoadTaskBak")
    public void downLoadTaskBak(HttpServletResponse response, @RequestBody QueryStockComposeTaskReq queryTaskReq) {
        stockComposeTaskService.downLoadTaskBak(response, queryTaskReq);
    }


    /**
     * 添加组合式任务
     * @param addTaskReq 添加任务参数
     * @return 添加结果
     */
    @PostMapping("/addTask")
    public AppServeResponse addTask(@RequestBody @Validated AddStockComposeTaskReq addTaskReq) {
        return stockComposeTaskService.addTask(addTaskReq);
    }

    /**
     * 取消组合式任务
     * @param taskId 任务ID
     * @return 取消结果
     */
    @PutMapping("/cancelTask")
    public AppServeResponse cancelTask(@RequestParam String taskId) {
        return stockComposeTaskService.cancelTask(taskId);
    }

    /**
     * 完成组合式任务
     * @param taskId 任务ID
     * @return 完成结果
     */
    @PutMapping("/completeTask")
    public AppServeResponse completeTask(@RequestParam String taskId) {
        return stockComposeTaskService.completeTask(taskId);
    }

    /**
     * 重置组合式任务
     * @param taskId 任务ID
     * @return 重置结果
     */
    @PutMapping("/resetTask")
    public AppServeResponse resetTask(@RequestParam String taskId) {
        return stockComposeTaskService.resetTask(taskId);
    }

    /**
     * 任务完成状态报告
     * @param reporterTaskStatusReq 状态报告参数
     * @return 状态报告结果
     */
    @PostMapping("/reporterTaskCompleted")
    public AppServeResponse reporterTaskCompleted(@RequestBody @Validated ReporterTaskStatusReq reporterTaskStatusReq) {
        return stockComposeTaskService.reporterTaskCompleted(reporterTaskStatusReq);
    }

    /**
     * 任务取消状态报告
     * @param reporterTaskStatusReq 状态报告参数
     * @return 状态报告结果
     */
    @PostMapping("/reporterTaskCancel")
    public AppServeResponse reporterTaskCancel(@RequestBody @Validated ReporterTaskStatusReq reporterTaskStatusReq) {
        return stockComposeTaskService.reporterTaskCancel(reporterTaskStatusReq);
    }

    /**
     * 任务完成状态报告 ---- 历史任务
     * @param reporterTaskStatusReq 状态报告参数
     * @return 状态报告结果
     */
    @PostMapping("/reporterTaskBakCompleted")
    public AppServeResponse reporterTaskBakCompleted(@RequestBody @Validated ReporterTaskStatusReq reporterTaskStatusReq) {
        return stockComposeTaskService.reporterTaskBakCompleted(reporterTaskStatusReq);
    }

    /**
     * 任务取消状态报告 ---- 历史任务
     * @param reporterTaskStatusReq 状态报告参数
     * @return 状态报告结果
     */
    @PostMapping("/reporterTaskBakCancel")
    public AppServeResponse reporterTaskBakCancel(@RequestBody @Validated ReporterTaskStatusReq reporterTaskStatusReq) {
        return stockComposeTaskService.reporterTaskBakCancel(reporterTaskStatusReq);
    }

    /**
     * 查询任务路径结果
     * @param taskId 任务ID
     * @return 任务路径结果
     */
    @GetMapping("/queryCourseResult")
    public AppServeDataResponse<List<CourseResultVo>> queryCourseResult(@RequestParam("composeTaskId") @NotBlank(message = "任务ID不能为空") String taskId) {
        return stockComposeTaskService.queryCourseResult(taskId);
    }

}
