package com.zbkj.crmeb.pub.controller;

import com.alibaba.fastjson.JSONObject;
import com.common.CommonResult;
import com.utils.RestTemplateUtil;
import com.zbkj.crmeb.system.service.SystemAdminService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


/**
 * 后台管理员表 前端控制器
 * +----------------------------------------------------------------------
 * | CRMEB [ CRMEB赋能开发者，助力企业发展 ]
 * +----------------------------------------------------------------------
 * | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
 * +----------------------------------------------------------------------
 * | Licensed CRMEB并不是自由软件，未经许可不能去掉CRMEB相关版权
 * +----------------------------------------------------------------------
 * | Author: CRMEB Team <admin@crmeb.com>
 * +----------------------------------------------------------------------
 */
@Slf4j
@RestController
@RequestMapping("api/public/wechat")
@Api(tags = "企业微信消息推送")
public class WeChatPushController {
    private static final Logger logger = LoggerFactory.getLogger(WeChatPushController.class);

    private static String url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=";

    @Resource
    private RestTemplateUtil restTemplateUtil;

    @Resource
    private SystemAdminService systemAdminService;


    /**
     * 新增后台管理员表
     * @param message string message
     * @author Mr.Zhang
     * @since 2020-04-13
     */
    @ApiOperation(value = "gitlab钩子")
    @RequestMapping(value = "/gitlab", method = RequestMethod.POST)
    @ApiImplicitParams({
            @ApiImplicitParam(name="message", value="推送消息内容"),
            @ApiImplicitParam(name="token", value="企业微信群token"),
    })
    public CommonResult<Object> gitlab(@RequestBody String message,
                                       @RequestParam(name = "token", required = true) String token){

        Map<String, Object> map = new HashMap<>();
        map.put("msgtype", "text");

        Map<String, Object> text = new HashMap<>();

        //需要@的人
        ArrayList<Object> people = new ArrayList<>();
        people.add("@all");
        text.put("mentioned_list", people);

        //gitlab 动作标签
        JSONObject jsonObject = JSONObject.parseObject(message);
        String action = jsonObject.getString("object_kind");
        String content;
        switch(action){
            case "push":
                content = jsonObject.getJSONArray("commits").getJSONObject(0).getJSONObject("author").getString("name") + " " +
                        action + " " +
                        jsonObject.getString("ref").replace("refs/heads/", "") +
                        "\n 备注：\n" +
                        jsonObject.getJSONArray("commits").getJSONObject(0).getString("message");
                break;
            case "tag_push":
                content = jsonObject.getString("user_name") + " " +
                        action + " " +
                        jsonObject.getString("ref").replace("refs/heads/", "") +
                        "\n 备注：\n" +
                        jsonObject.getJSONArray("commits").getJSONObject(0).getString("message");
                break;
            case "note":
                String author = "未知用户";
                if(jsonObject.containsKey("commit")){
                    author = jsonObject.getJSONObject("commit").getJSONObject("author").getString("name");
                }

                if(jsonObject.containsKey("last_commit")){
                    author = jsonObject.getJSONObject("last_commit").getJSONObject("author").getString("name");
                }

                content = author +
                        " 提交代码到 " +
                        jsonObject.getJSONObject("project").getString("default_branch") +
                        "\n 备注：\n" +
                        jsonObject.getJSONObject("object_attributes").getString("note");
                break;
            case "merge_request":
                content = jsonObject.getJSONObject("object_attributes").getJSONObject("assignee").getString("name") + " " +
                        "合并代码， 从 " +
                        jsonObject.getJSONObject("object_attributes").getString("source_branch") + " ---> " +
                        jsonObject.getJSONObject("object_attributes").getString("target_branch") +
                        "\n 备注：\n" +
                        jsonObject.getJSONObject("object_attributes").getJSONObject("last_commit").getString("message");
                break;
            default:
                content = "gitlab 项目有更新";
        }

        text.put("content", content);
        map.put("text", text);
        String result = restTemplateUtil.postMapData(url + token, map);
        return CommonResult.success(JSONObject.parseObject(result));
    }

    /**
     * 新增后台管理员表
     * @param message string message
     * @author Mr.Zhang
     * @since 2020-04-13
     */
    @ApiOperation(value = "消息推送")
    @RequestMapping(value = "/push", method = RequestMethod.GET)
    @ApiImplicitParams({
            @ApiImplicitParam(name="message", value="推送消息内容"),
            @ApiImplicitParam(name="token", value="企业微信群token"),
    })
    public CommonResult<Object> push(@RequestParam(name = "message") String message,
                                    @RequestParam(name = "token") String token){

        Map<String, Object> map = new HashMap<>();
        map.put("msgtype", "text");

        Map<String, Object> text = new HashMap<>();

        //需要@的人
        ArrayList<Object> people = new ArrayList<>();
        people.add("@all");
        text.put("mentioned_list", people);
        text.put("content", message);
        map.put("text", text);
        String result = restTemplateUtil.postMapData(url + token, map);
        return CommonResult.success(JSONObject.parseObject(result));
    }
}



