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.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.BizBaseTeamMember;
import com.artfess.rescue.base.manager.BizBaseTeamMemberManager;

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("/bizBaseTeamMember/v1/")
@Api(tags = "基础信息-巡检救援队员信息")
@ApiGroup(group = {ApiGroupConsts.GROUP_BIZ_RESCUE})
public class BizBaseTeamMemberController extends BaseController<BizBaseTeamMemberManager, BizBaseTeamMember> {

    @Resource
    RescueOrgManager orgManager;

    @Override
    @PostMapping("/")
    @ApiOperation("添加实体的接口")
    public CommonResult<String> create(@ApiParam(name = "model", value = "实体信息") @Validated({AddGroup.class}) @RequestBody BizBaseTeamMember t) {
        boolean res = baseService.saveInfo(t);
        return new CommonResult<>(res?"添加成功":"添加失败");
    }

    @GetMapping("/user/{userId}")
    @ApiOperation("根据userId找到用户")
    public CommonResult<String> getMemberId(@PathVariable("userId") String userId) {
        String id = baseService.getMemberId(userId);
        return CommonResult.success(id,"");
    }

    @PostMapping("/authByPage")
    @ApiOperation("分页查询-根据队伍查询人员信息")
    public PageList<BizBaseTeamMember> findByPage(@RequestBody QueryFilter<BizBaseTeamMember> queryFilter) {
        return baseService.authByPage(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<BizBaseTeamMember> query(@ApiParam(name = "queryFilter", value = "分页查询信息") @RequestBody QueryFilter<BizBaseTeamMember> 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("ROAD_ID_",roadIds, QueryOP.IN);
        return baseService.query(queryFilter);
    }

}
