package com.schisandra.system.application.controller;

import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;

import com.schisandra.system.application.convert.SchisandraSysOauthDTOConverter;
import com.schisandra.system.application.dto.SchisandraSysOauthDTO;
import com.schisandra.system.common.entity.Result;
import com.schisandra.system.domain.bo.SchisandraSysOauthBO;
import com.schisandra.system.domain.service.SchisandraSysOauthDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * controller
 *
 * @author landaiqing
 * @since 2024-05-25 23:08:26
 */
@RestController
@RequestMapping("/system/oauth/")
@Slf4j
public class SchisandraSysOauthController {

    @Resource
    private SchisandraSysOauthDomainService schisandraSysOauthDomainService;

    /**
     * 新增
     */
    @RequestMapping("add")
    public Result<Boolean> add(@RequestBody SchisandraSysOauthDTO schisandraSysOauthDTO) {

        try {
            if (log.isInfoEnabled()) {
                log.info("SchisandraSysOauthController.add.dto:{}", JSON.toJSONString(schisandraSysOauthDTO));
            }
            Preconditions.checkNotNull(schisandraSysOauthDTO.getId(), "不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getClientType(), "类型不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getClientId(), "Client Id不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getClientSecret(), "Client Secret不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getRedirectUri(), "应用回调地址不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getStackOverflowKey(), "Key不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getDomainPrefix(), "团队名不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getTenantId(), "目录(租户) ID不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getAlipayPublicKey(), "不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getAgentId(), "不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getCreatedBy(), "创建人不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getCreatedTime(), "创建时间不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getUpdateTime(), "更新时间不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getUpdateBy(), "更新人不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getStatus(), "状态不能为空");
            SchisandraSysOauthBO SchisandraSysOauthBO = SchisandraSysOauthDTOConverter.INSTANCE.convertDTOToBO(schisandraSysOauthDTO);
            return Result.ok(schisandraSysOauthDomainService.add(SchisandraSysOauthBO));
        } catch (Exception e) {
            log.error("SchisandraSysOauthController.register.error:{}", e.getMessage(), e);
            return Result.fail("新增失败");
        }

    }

    /**
     * 修改
     */
    @RequestMapping("update")
    public Result<Boolean> update(@RequestBody SchisandraSysOauthDTO schisandraSysOauthDTO) {

        try {
            if (log.isInfoEnabled()) {
                log.info("SchisandraSysOauthController.update.dto:{}", JSON.toJSONString(schisandraSysOauthDTO));
            }
            Preconditions.checkNotNull(schisandraSysOauthDTO.getId(), "不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getClientType(), "类型不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getClientId(), "Client Id不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getClientSecret(), "Client Secret不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getRedirectUri(), "应用回调地址不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getStackOverflowKey(), "Key不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getDomainPrefix(), "团队名不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getTenantId(), "目录(租户) ID不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getAlipayPublicKey(), "不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getAgentId(), "不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getCreatedBy(), "创建人不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getCreatedTime(), "创建时间不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getUpdateTime(), "更新时间不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getUpdateBy(), "更新人不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getStatus(), "状态不能为空");
            SchisandraSysOauthBO schisandraSysOauthBO = SchisandraSysOauthDTOConverter.INSTANCE.convertDTOToBO(schisandraSysOauthDTO);
            return Result.ok(schisandraSysOauthDomainService.update(schisandraSysOauthBO));
        } catch (Exception e) {
            log.error("SchisandraSysOauthController.update.error:{}", e.getMessage(), e);
            return Result.fail("更新信息失败");
        }

    }

    /**
     * 删除
     */
    @RequestMapping("delete")
    public Result<Boolean> delete(@RequestBody SchisandraSysOauthDTO schisandraSysOauthDTO) {

        try {
            if (log.isInfoEnabled()) {
                log.info("SchisandraSysOauthController.delete.dto:{}", JSON.toJSONString(schisandraSysOauthDTO));
            }
            Preconditions.checkNotNull(schisandraSysOauthDTO.getId(), "不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getClientType(), "类型不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getClientId(), "Client Id不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getClientSecret(), "Client Secret不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getRedirectUri(), "应用回调地址不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getStackOverflowKey(), "Key不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getDomainPrefix(), "团队名不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getTenantId(), "目录(租户) ID不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getAlipayPublicKey(), "不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getAgentId(), "不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getCreatedBy(), "创建人不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getCreatedTime(), "创建时间不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getUpdateTime(), "更新时间不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getUpdateBy(), "更新人不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
            Preconditions.checkNotNull(schisandraSysOauthDTO.getStatus(), "状态不能为空");
            SchisandraSysOauthBO schisandraSysOauthBO = SchisandraSysOauthDTOConverter.INSTANCE.convertDTOToBO(schisandraSysOauthDTO);
            return Result.ok(schisandraSysOauthDomainService.delete(schisandraSysOauthBO));
        } catch (Exception e) {
            log.error("SchisandraSysOauthController.delete.error:{}", e.getMessage(), e);
            return Result.fail("删除信息失败");
        }

    }

    @PostMapping("getOauthConfigByType")
    public Result<SchisandraSysOauthDTO> getOauthConfigByType(@RequestParam("type") String type) {
        if (log.isInfoEnabled()) {
            log.info("SchisandraSysOauthController.getOauthConfig.key:{}", type);
        }
        SchisandraSysOauthBO schisandraSysOauthBO = schisandraSysOauthDomainService.getOauthConfigByType(type);
        SchisandraSysOauthDTO schisandraSysOauthDTO = SchisandraSysOauthDTOConverter.INSTANCE.convertBOToDTO(schisandraSysOauthBO);
        return Result.ok(schisandraSysOauthDTO);
    }

}
