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.AdmDoor;
import com.persagy.proxy.object.service.IAdmDoorService;
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 java.util.List;

/**
 * ADM 门 API
 * @author xujiaheng
 * @date 2021-09-06
 */
@RestController
@RequestMapping("/object/door")
public class AdmDoorController {

    @Autowired
    private IAdmDoorService service;

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

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

    /**
     * 根据ID删除
     * @param vos
     * @return
     * @throws Exception
     */
    @PostMapping("/delete")
    public AdmResponse delete(@RequestBody List<AdmDoor> vos) throws Exception {
        // 组装上下文条件
        service.doDelete(AdmContextUtil.toDmpContext(), vos);
        return AdmResponse.success();
    }

    /**
     * 更新
     * @param createRequest
     * @return
     * @throws Exception
     */
    @PostMapping("/update")
    public AdmResponse update(@RequestBody AdmCreateRequest<AdmDoor> createRequest) throws Exception {
        List<AdmDoor> vos = CollUtil.newArrayList(createRequest.getContent());
        vos = service.doUpdate(AdmContextUtil.toDmpContext(), AdmDoor.class, vos);
        return AdmResponse.success(vos);
    }

    /**
     * 查询
     * @param request
     * @return
     * @throws Exception
     */
    @PostMapping("/query")
    public AdmResponse query(@RequestBody AdmQueryCriteria request) throws Exception {
        request.setName("equipment");
        request.setFilters("classCode = 'CFBEDR'");
        return service.doQuery(AdmContextUtil.toDmpContext(), request, AdmDoor.class);
    }

    /**
     * 统计
     * @param request
     * @return
     * @throws Exception
     */
    @PostMapping("/count")
    public AdmResponse count(@RequestBody AdmQueryCriteria request) throws Exception {
        request.setName("equipment");
        request.setOnlyCount(true);
        return service.doQuery(AdmContextUtil.toDmpContext(), request, AdmDoor.class);
    }
}
