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.AdmWindow;
import com.persagy.proxy.object.service.IAdmWindowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

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

    @Autowired
    private IAdmWindowService service;

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

    /**
     * 创建(主键重复则忽略)
     * @param createRequest
     * @return
     * @throws Exception
     */
    @PostMapping("/create_ignore")
    public AdmResponse createIgnore(@RequestBody AdmCreateRequest<AdmWindow> createRequest,
                                    @RequestParam(value = "projectId",required = false) String projectId) 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<AdmWindow> vos) throws Exception {
        service.doDelete(AdmContextUtil.toDmpContext(), vos);
        return AdmResponse.success();
    }

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

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

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