package com.artfess.rescue.patrol.controller;


import com.artfess.base.annotation.ApiGroup;
import com.artfess.base.constants.ApiGroupConsts;
import com.artfess.base.constants.SystemConstants;
import com.artfess.base.context.BaseContext;
import com.artfess.base.controller.BaseController;
import com.artfess.base.enums.InspectTypeEnum;
import com.artfess.base.enums.InspectionTypeEnum;
import com.artfess.base.enums.ResponseErrorEnums;
import com.artfess.base.enums.WorkclassEnum;
import com.artfess.base.feign.UCFeignService;
import com.artfess.base.model.CommonResult;
import com.artfess.base.query.FieldRelation;
import com.artfess.base.query.PageList;
import com.artfess.base.query.QueryFilter;
import com.artfess.base.query.QueryOP;
import com.artfess.base.valid.AddGroup;
import com.artfess.base.valid.UpdateGroup;
import com.artfess.poi.util.ExcelUtils;
import com.artfess.rescue.patrol.vo.ReplaceCarVO;
import com.artfess.rescue.patrol.manager.BizInspectionResultManager;
import com.artfess.rescue.patrol.model.BizInspectionResult;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 巡检任务结果表 前端控制器
 *
 * @company 阿特菲斯信息技术有限公司
 * @author 系统管理员
 * @since 2024-08-02
 */
@RestController
@RequestMapping("/patrol/bizInspectionResult/v1/")
@Api(tags = "巡检巡查-巡检任务结果表")
@ApiGroup(group = {ApiGroupConsts.GROUP_BIZ_RESCUE})
public class BizInspectionResultController extends BaseController<BizInspectionResultManager, BizInspectionResult> {
    @Resource
    UCFeignService feignService;
    @Resource
    BaseContext baseContext;


    @Override
    @PostMapping("/")
    @ApiOperation("添加实体的接口")
    public CommonResult<String> create(@ApiParam(name = "model", value = "实体信息") @Validated({AddGroup.class}) @RequestBody BizInspectionResult t) {
        boolean result = baseService.saveInfo(t);
        if (!result) {
            return new CommonResult<>(ResponseErrorEnums.FAIL_OPTION, null);
        }
        return new CommonResult<>();
    }

    @Override
    @PostMapping(value = "/query", produces = {"application/json; charset=utf-8"})
    @ApiOperation("分页查询结果")
    public PageList<BizInspectionResult> query(@ApiParam(name = "queryFilter", value = "分页查询信息") @RequestBody QueryFilter<BizInspectionResult> queryFilter) {
        // 非系统管理员自能查询自己部门的任务，本级的人员可以看全部
        if (!baseContext.getCurrentOrgId().equals(SystemConstants.SYS_ORG_ID) && !baseContext.isAdmin()) {
            String deptId = baseContext.getCurrentDeptId();
            List<ObjectNode> childOrg = feignService.getChildOrg(deptId);
            List<String> collect = new ArrayList<>();
            for (ObjectNode jsonNodes : childOrg) {
                String id = jsonNodes.get("id").asText();
                collect.add(id);
            }
            collect.add(deptId);
            String orgIds = collect.stream().collect(Collectors.joining(","));
            queryFilter.addFilter("r.CREATE_COMPANY_ID_", String.join("','", orgIds), QueryOP.IN, FieldRelation.AND);
        }
        return baseService.findByPage(queryFilter);
    }

    @Override
    @GetMapping("/{id}")
    @ApiOperation("根据id查询实体")
    public BizInspectionResult getById(@ApiParam(name = "id", value = "实体id") @PathVariable String id) {
        return baseService.findById(id);
    }

    @Override
    @PutMapping("/")
    @ApiOperation("更新实体")
    public CommonResult<String> updateById(@ApiParam(name = "model", value = "实体信息") @Validated({UpdateGroup.class}) @RequestBody BizInspectionResult t) {
        boolean result = baseService.updateInfo(t);
        if (!result) {
            return new CommonResult<>(ResponseErrorEnums.FAIL_OPTION, "更新实体失败");
        }
        return new CommonResult<>();
    }


    @ApiOperation(value = "导出")
    @PostMapping("/export")
    public void export(HttpServletResponse response, HttpServletRequest request,
                       @ApiParam(name="queryFilter", value="分页查询信息") @RequestBody QueryFilter<BizInspectionResult> queryFilter) throws Exception {
        PageList<BizInspectionResult> page = baseService.findByPage(queryFilter);
        page.getRows().forEach(result -> {
            result.setWorkclass(WorkclassEnum.getDesc(result.getWorkclass()));
            result.setInspectType(InspectTypeEnum.getDesc(result.getInspectType()));
            result.setType(InspectionTypeEnum.getDesc(result.getType()));
        });
        ExcelUtils<BizInspectionResult> util = new ExcelUtils<>(BizInspectionResult.class);
        util.exportExcel(response, request, page.getRows(), "巡检结果导出");
    }


    @PostMapping(value = "/replaceCar", produces = {"application/json; charset=utf-8"})
    @ApiOperation("车辆替换")
    public CommonResult<String> replaceCar( @RequestBody ReplaceCarVO carVO) {
        boolean car = baseService.replaceCar(carVO);
        return new CommonResult<>(car?"替换成功":"替换失败");
    }



}
