package com.qmth.ops.api.controller.admin;

import com.qmth.boot.api.annotation.Aac;
import com.qmth.boot.api.annotation.BOOL;
import com.qmth.ops.api.constants.OpsApiConstants;
import com.qmth.ops.api.security.AdminSession;
import com.qmth.ops.api.security.Permission;
import com.qmth.ops.api.vo.CodeNameVO;
import com.qmth.ops.api.vo.EnvVO;
import com.qmth.ops.biz.domain.AppEnv;
import com.qmth.ops.biz.domain.Env;
import com.qmth.ops.biz.domain.EnvType;
import com.qmth.ops.biz.service.AppService;
import com.qmth.ops.biz.service.EnvService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@RestController
@RequestMapping(OpsApiConstants.ADMIN_URI_PREFIX + "/env")
public class EnvController {

    @Resource
    private EnvService envService;

    @Resource
    private AppService appService;

    @RequestMapping("/types")
    @Aac(auth = BOOL.FALSE)
    public Object types() {
        return Arrays.stream(EnvType.values()).map(item -> new CodeNameVO(item.getCode(), item.getName())).toArray();
    }

    @PostMapping("/insert")
    public EnvVO insert(@RequestAttribute AdminSession adminSession, Env env) {
        adminSession.permissionCheck(Permission.ENV_INSERT);
        env = envService.insert(env);
        return new EnvVO(env);
    }

    @PostMapping("/update")
    public EnvVO update(@RequestAttribute AdminSession adminSession, Env env) {
        adminSession.permissionCheck(Permission.ENV_EDIT);
        env = envService.update(env);
        return new EnvVO(env);
    }

    @PostMapping("/list")
    public List<AppEnv> list() {
        return envService.listAppEnv();
    }

    @PostMapping("/app/list")
    public List<EnvVO> listByApp(@RequestParam Long appId) {
        return envService.list(appId).stream().map(EnvVO::new).collect(Collectors.toList());
    }

}