package com.goafanti.techproject.controller;

import com.goafanti.common.bo.Result;
import com.goafanti.common.constant.ErrorConstants;
import com.goafanti.common.controller.BaseController;
import com.goafanti.common.model.TaskDetails;
import com.goafanti.common.model.TaskDetailsLog;
import com.goafanti.common.model.TaskFeature;
import com.goafanti.techproject.bo.InputTaskDetailsBo;
import com.goafanti.techproject.bo.InputTaskFeature;
import com.goafanti.techproject.bo.TaskDetailsBo;
import com.goafanti.techproject.service.TaskDetailsService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 项目申报详情(TaskDetails)表控制层
 *
 * @author makejava
 * @since 2024-12-26 17:11:50
 */
@RestController
@RequestMapping("/api/admin/taskDetails")
public class TaskDetailsController extends BaseController {
    /**
     * 服务对象
     */
    @Resource
    private TaskDetailsService taskDetailsService;


    /**
     * 新增项目进度数据
     *
     * @param taskDetails 实体
     * @param type        0=初步新增，1=新增切同步日志
     * @return 新增结果
     */
    @PostMapping("/add")
    public Result<TaskDetails> add(TaskDetails taskDetails,Integer type) {
        Result<TaskDetails> res = new Result<>();
        if (taskDetailsService.checkTid(taskDetails)){
            res.getError().add(buildError(ErrorConstants.PARAM_BEING_ERROR,"项目进度与年份"));
            return res;
        }
        return res.data(this.taskDetailsService.insert(taskDetails,type));
    }


    /**
     * 查询项目进度单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("/get")
    public Result<TaskDetails> queryById(Integer id) {
        return new Result<>().data(this.taskDetailsService.queryById(id));
    }

    /**
     * 查询项目进度页面
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("/getByTid")
    public Result<TaskDetails> getByTid(Integer id) {
        return new Result<>().data(this.taskDetailsService.pushByTid(id));
    }


    /**
     * 编辑项目进度数据
     *
     * @param taskDetails 实体
     * @return 编辑结果
     */
    @PostMapping("/update")
    public Result update(TaskDetails taskDetails,Integer type) {
        return new Result<>().data(this.taskDetailsService.update(taskDetails,type));
    }

    /**
     * 修改进度下载时间
     *
     * @return 编辑结果
     */
    @PostMapping("/updateDownload")
    public Result updateDownload(Integer id) {
        TaskDetails newTd=new TaskDetails();
        newTd.setId(id);
        newTd.setDownloadTime(new Date());
        return new Result<>().data(this.taskDetailsService.updateDownload(newTd));
    }


    /**
     * 删除数据
     *
     * @param id 主键
     * @return 删除是否成功
     */
    @GetMapping("/delete")
    public Result deleteById(Integer id) {
        return new Result<>().data(this.taskDetailsService.deleteById(id));
    }

    /**
     * 列表查询
     *
     * @param in 参数
     * @return
     */
    @GetMapping("/list")
    public Result<TaskDetails> list(TaskDetails in, Integer pageNo, Integer pageSize) {
        return new Result<>().data(this.taskDetailsService.list(in, pageNo, pageSize));
    }

    /**
     * 项目进度列表(我的与我的下级)
     *
     * @param in 参数
     * @return
     */
    @GetMapping("/detailsList")
    public Result<TaskDetailsBo> detailsList(InputTaskDetailsBo in) {
        return new Result<>().data(this.taskDetailsService.pushDetailsList(in));
    }



    /**
     * 导出数据
     *
     * @return
     */
    @GetMapping("/exportById")
    public Result export(Integer id) {
        return this.taskDetailsService.exportById(id);
    }


    /**
     * 导出数据
     *
     * @return
     */
    @GetMapping("/export")
    public Result export(InputTaskDetailsBo in) {
        return this.taskDetailsService.pushExport(in);
    }

    /**
     * 新增特色工作
     * @param in
     * @return
     */
    @PostMapping("/addTaskFeature")
    public Result<TaskFeature> addTaskFeature(InputTaskFeature in ) {
        Result<TaskFeature> res = new Result<>();
        return res.data(this.taskDetailsService.addFeature(in));
    }

    /**
     * 编辑项目特色工作
     *
     * @param in 实体
     * @return 编辑结果
     */
    @PostMapping("/updateTaskFeature")
    public Result<TaskFeature> updateTaskFeature(InputTaskFeature in) {
        return new Result<>().data(this.taskDetailsService.updateFeature(in));
    }

    /**
     * 删除项目特色工作
     *
     * @return 编辑结果
     */
    @PostMapping("/deleteTaskFeature")
    public Result deleteTaskFeature(Integer id) {
        return new Result<>().data(this.taskDetailsService.deleteTaskFeature(id));
    }



    /**
     * 日志列表查询
     *
     */
    @GetMapping("/logList")
    public Result<List<TaskDetailsLog>> logList(Integer id,Integer pageNo, Integer pageSize) {
        return new Result<>().data(this.taskDetailsService.logList(id, pageNo,pageSize));
    }


    /**
     * 日志详情查询
     *
     */
    @GetMapping("/logDetails")
    public Result logDetails(Integer id) {
        return new Result<>().data(this.taskDetailsService.logDetails(id));
    }

}

