package com.xueyi.nlt.netty.controller;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xueyi.common.cache.utils.SourceUtil;
import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.common.core.web.result.AjaxResult;
import com.xueyi.common.core.web.result.R;
import com.xueyi.nlt.api.netty.domain.vo.DmWebSocketMessageVo;
import com.xueyi.nlt.api.nlt.domain.vo.DmIntentVo;
import com.xueyi.nlt.netty.client.WebSocketClient;
import com.xueyi.nlt.nlt.domain.vo.IntentTemplateVo;
import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto;
import com.xueyi.system.api.model.Source;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
@RequestMapping("/websocket")
public class DmWebsocketController {

    private static final Logger log = LoggerFactory.getLogger(DmWebsocketController.class);

    @Autowired
    WebSocketClient webSocketClient;

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @Autowired
    RedisTemplate redisTemplate;


    /**
     * 意图请求
     列表
     */
    @PostMapping("/inner/sendMessage")
    @ResponseBody
    public R sendMessage(@RequestBody DmWebSocketMessageVo message) {

        log.info("websocket sendMessage:{}", message);
        if (message == null || message.getFormat() == null) {
            return R.fail("参数为空");
        }
        JSONObject jo = message.getFormat();
        SimpleDateFormat dateFormat3 = new SimpleDateFormat("MM-dd");
        Double timestamp = Double.valueOf((String)jo.get("timestamp"));
        String meetingRoom = jo.getString("meetingRoom");
        if (StringUtils.isNotEmpty(message.getTemplate()) && message.getTemplate().equals("birthday")) {
            String prefix = "假设你是一名公司前台，你看到" + message.getFormat().get("name")+ "已知今天是他的生日。请你从个人角度输出给他的生日贺词。要求待人平和，具有人情味，用词正式，内容与工作无关。输出只包含你要对他说的话，在20字以内。";
            webSocketClient.sendMsg(prefix);
            redisTemplate.opsForValue().set("gpt:websocket" + ":" + "1", message);
            return R.ok();
        }
        if (StringUtils.isNotEmpty(message.getTemplate()) && message.getTemplate().equals("hiredate")) {
            String prefix = "假设你是一名公司前台，你看到"+ message.getFormat().get("name")+ "，已知今天是他入职1周年，请你从个人角度说出对他入职周年的祝贺。要求具有人情味，有特色，字数在25字左右，不要提到生日，要带人名。输出只包含你要对他说的话。";
            webSocketClient.sendMsg(prefix);
            redisTemplate.opsForValue().set("gpt:websocket" + ":" + "1", message);
            return R.ok();
        }
        Date date = new Date(timestamp.longValue());
        if (message.getSkillCode().equals("1")) {
            String prefix = "假设你是一名公司前台，你看到在你们公司工作的\\"+ jo.getString("orderName")+ "\\，请你从个人角度提醒他参加\\" +
                    dateFormat3.format(timestamp) + "\\在\\" + meetingRoom + "\\的会，要求语气友好。输出只包含你要对他说的话，在20字左右。";
            webSocketClient.sendMsg(prefix);
            // 设置缓存
            redisTemplate.opsForValue().set("gpt:websocket" + ":" + "1", message);
        }
        return R.ok();
    }
}
