package com.artfess.rescue.base.controller;


import com.artfess.base.annotation.ApiGroup;
import com.artfess.base.constants.ApiGroupConsts;
import com.artfess.base.enums.ResponseErrorEnums;
import com.artfess.base.model.CommonResult;
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.rescue.base.model.BizBaseRoad;
import com.artfess.rescue.base.model.BizBaseTeam;
import com.artfess.rescue.base.model.BizBaseTeamMember;
import com.artfess.rescue.uc.manager.RescueOrgManager;
import com.artfess.rescue.uc.vo.OrgInfoVO;
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 com.artfess.base.controller.BaseController;
import com.artfess.rescue.base.model.BizBaseCar;
import com.artfess.rescue.base.manager.BizBaseCarManager;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 巡检救援车辆信息 前端控制器
 *
 * @company 阿特菲斯信息技术有限公司
 * @author 系统管理员
 * @since 2024-07-24
 */
@RestController
@RequestMapping("/bizBaseCar/v1/")
@Api(tags = "巡检救援车辆信息")
@ApiGroup(group = {ApiGroupConsts.GROUP_BIZ_RESCUE})
public class BizBaseCarController extends BaseController<BizBaseCarManager, BizBaseCar> {

    @Resource
    RescueOrgManager orgManager;

    @RequestMapping(value = "isVerSuccessfulCarNumber", method = RequestMethod.POST, produces = {"application/json; charset=utf-8"})
    @ApiOperation(value = "对车牌号进行去重验证", httpMethod = "POST", notes = "对车牌号进行去重验证")
    public CommonResult<String> isRepeatCarNumber(@RequestParam(value = "id",required = false) String id,@RequestParam(value = "carNumber")String carNumber){
        boolean res = baseService.isVerSuccessfulCarNumber(id, carNumber);
        return new CommonResult<>(res,res?"":"已存在该车牌号的信息");
    }

    @GetMapping("/getCar")
    @ApiOperation("根据id查询实体")
    public CommonResult<List<BizBaseCar>> getCar(@ApiParam(name = "id", value = "实体id") @RequestParam("roadId")String roadId,@RequestParam("type")List<Integer> type) {
        return CommonResult.success(baseService.getCar(roadId, type),"");
    }

    @GetMapping("/list/{teamId}")
    @ApiOperation("根据队伍id查询车辆信息")
    public CommonResult<List<BizBaseCar>> getList(@PathVariable("teamId")String teamId) {
        return CommonResult.success(baseService.getCarList(teamId),"");
    }

    @PostMapping("/findByPage")
    @ApiOperation("分页查询")
    public PageList<BizBaseCar> findByPage(@RequestBody QueryFilter<BizBaseCar> queryFilter) {
        return baseService.findByPage(queryFilter);
    }

    @Override
    @DeleteMapping("/")
    @ApiOperation("根据id集合批量删除")
    public CommonResult<String> deleteByIds(@ApiParam(name = "ids", value = "实体集合") @RequestParam String... ids) {
        boolean result = baseService.deleteByIds(Arrays.asList(ids));
        if (!result) {
            return new CommonResult<>(ResponseErrorEnums.FAIL_OPTION, "删除实体失败");
        }
        return new CommonResult<>();
    }

    @Override
    @PostMapping(value = "/query", produces = {"application/json; charset=utf-8"})
    @ApiOperation("分页查询结果")
    public PageList<BizBaseCar> query(@ApiParam(name = "queryFilter", value = "分页查询信息") @RequestBody QueryFilter<BizBaseCar> queryFilter) {
        //权限控制
        List<List<BizBaseRoad>> roadList = orgManager.roadTree().stream().map(OrgInfoVO::getRoadList).filter(Objects::nonNull).collect(Collectors.toList());
        ArrayList<String> roadIds = new ArrayList<>();
        if (roadList.isEmpty()){
            return new PageList<>();
        }
        for (List<BizBaseRoad> roads : roadList) {
            List<String> ids = roads.stream().map(BizBaseRoad::getId).filter(Objects::nonNull).collect(Collectors.toList());
            roadIds.addAll(ids);
        }
        queryFilter.addFilter("c.ROAD_ID_",roadIds, QueryOP.IN);
        return baseService.query(queryFilter);
    }


}
