package com.persagy.proxy.object.controller;

import cn.hutool.core.collection.CollUtil;
import com.persagy.proxy.adm.request.AdmCreateRequest;
import com.persagy.proxy.adm.request.AdmCreateResponse;
import com.persagy.proxy.adm.request.AdmQueryCriteria;
import com.persagy.proxy.adm.request.AdmResponse;
import com.persagy.proxy.adm.utils.AdmContextUtil;
import com.persagy.proxy.common.entity.InstanceUrlParam;
import com.persagy.proxy.object.model.AdmVirtualWall;
import com.persagy.proxy.object.service.IAdmVirtualWallService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.ws.rs.QueryParam;
import java.util.List;

/**
 * ADM 窗户 API
 * @author xujiaheng
 * @date 2021-09-3
 */
@RestController
@RequestMapping("/object/virtualWall")
public class AdmVirtualWallController {

    @Autowired
    private IAdmVirtualWallService service;

    /**
     * 创建
     * @param createRequest
     * @return
     * @throws Exception
     */
    @PostMapping("/create")
    public AdmResponse create(@RequestBody AdmCreateRequest<AdmVirtualWall> createRequest, @QueryParam("projectId") String projectId) throws Exception {
        // 组装上下文条件
        InstanceUrlParam context = AdmContextUtil.toDmpContext();
        List<AdmVirtualWall> vos = CollUtil.newArrayList(createRequest.getContent());
        vos = service.doInsert(context, AdmVirtualWall.class, vos);
        return AdmResponse.success(vos);
    }

    /**
     * 创建(主键重复则忽略)
     * @param createRequest
     * @return
     * @throws Exception
     */
    @PostMapping("/create_ignore")
    public AdmCreateResponse createIgnore(@RequestBody AdmCreateRequest<AdmVirtualWall> createRequest, @QueryParam("projectId") String projectId) throws Exception {
        // 组装上下文条件
        InstanceUrlParam context = AdmContextUtil.toDmpContext();
        createRequest.getContent().forEach(it->{
            //TODO
        });
        return AdmCreateResponse.success();
    }

    /**
     * 根据ID删除
     * @param vos
     * @return
     * @throws Exception
     */
    @PostMapping("/delete")
    public AdmResponse delete(@RequestBody List<AdmVirtualWall> vos) throws Exception {
        service.doDelete(AdmContextUtil.toDmpContext(), vos);
        return AdmResponse.success();
    }

    /**
     * 更新
     * @param createRequest
     * @return
     * @throws Exception
     */
    @PostMapping("/update")
    public AdmResponse update(@RequestBody AdmCreateRequest<AdmVirtualWall> createRequest, @QueryParam("projectId") String projectId) throws Exception {
        // 组装上下文条件
        InstanceUrlParam context = AdmContextUtil.toDmpContext();
        List<AdmVirtualWall> vos = CollUtil.newArrayList(createRequest.getContent());
        vos = service.doUpdate(context, AdmVirtualWall.class, vos);
        return AdmResponse.success(vos);
    }

    /**
     * 查询
     * @param projectId
     * @param request
     * @return
     * @throws Exception
     */
    @PostMapping("/query")
    public AdmResponse query(@QueryParam("projectId") String projectId,
                             @RequestBody AdmQueryCriteria request) throws Exception {
        // 组装上下文条件
        InstanceUrlParam context = AdmContextUtil.toDmpContext();
        request.setName("equipment");
        request.setFilters("classCode = 'VIRTUALWALL'");
        return service.doQuery(context, request, AdmVirtualWall.class);
    }

    /**
     * 统计
     * @param projectId
     * @param request
     * @return
     * @throws Exception
     */
    @PostMapping("/count")
    public AdmResponse count(@QueryParam("projectId") String projectId,
                             @RequestBody AdmQueryCriteria request) throws Exception {
        // 组装上下文条件
        InstanceUrlParam context = AdmContextUtil.toDmpContext();
        request.setName("equipment");
        request.setOnlyCount(true);
        return service.doQuery(context, request, AdmVirtualWall.class);
    }
}
