package com.xueyi.nlt.nlt.template;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONException;
import com.alibaba.fastjson2.JSONObject;
import com.xueyi.common.core.web.result.R;
import com.xueyi.nlt.netty.client.WebSocketClient;
import com.xueyi.nlt.nlt.controller.DmIntentController;
import com.xueyi.system.api.meeting.feign.RemoteMeetingService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;


@Service("meeting-order")
public class MeetingOrderTemplate implements BaseTemplate {

    private static final Logger log = LoggerFactory.getLogger(MeetingOrderTemplate.class);
    @Autowired
    WebSocketClient webSocketClient;

//    @Autowired
//    RemoteMeetingService remoteMeetingService;

    @Autowired
    private RemoteMeetingService remoteMeetingService;
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Override
    public JSONObject handle(String devId, String content) {
        synchronized (WebSocketClient.LOCK) {
            LocalDateTime date = LocalDateTime.now();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd 00:00");
            DateTimeFormatter scheduleFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
            DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
//            String prefix = "假设你是一位前台，你需要通过与其他人对话来获取会议相关信息，已知今天是" +
//            date.format(formatter) + "，你需要获取会议日期，开始时间，持续时间，会议地点，会议主题。时间用类似00:00的格式输出。对方的话中可能不包含全部信息，对于未知的信息填充为none。如果所有信息都已知那么commit为true。否则为false。将你获得的信息输出为json格式。对方的话是：“";
//            String suffix = "”，只输出最后的json。输出只有一行，输出格式为{date：，start_time：，duration：，location：，theme：commit：}。";
//            remoteMeetingService.roomListInner()
//            String prefix = "我想请你充当[企业前台]， 已知现在是" +
//                    date.format(formatter) + "。我对你说：”";
//            String suffix = "”。会议地点：{" + "大会议室，小会议室" + "}。会议内容：{其他会议，例会，访客接待，面试}。未知的项目输出null。输出为{date：，start_time：，duration_hours：，location：，meeting_content：}";
//            String prefix = "我想请你充当[SQL数据库]，我需要的数据格式为{date：，start_time：，location：，meeting_theme：}，没有数据不返回字段，数据只能来自于如下文段：\"已知现在是" +
//                    date.format(formatter) + "，";
//            String suffix = "\"，只输出最后的JSON结果。不要输出任何解释说明或者代码。";


//            String prefix = "当前时间是" +
//                    date.format(formatter) + " " + date.getDayOfWeek() + "。我将提供一些用户输入的信息，请提取输入的内容进行结构化转换并输出对应 json 格式的代码。下面是结构的描述：会议日期date(格式为YYYY-MM-DD)；具体时间start_time（格式HH:MM）；会议室地点location； 下面是用户的输入信息:\"";
//            String suffix = "\"。请开始信息提取,你回复的内容必须是一个json结构，我只要json结果，不需要代码。";
//            log.info(prefix + content + suffix);
//            webSocketClient.sendMsg(prefix + content + suffix);
//            try {
//                WebSocketClient.LOCK.wait();
//                String result = redisTemplate.opsForValue().get("group:websocket:content");
//                try {
//                    //对result进行解析，获取字符串第一个与'{'和最后一个'}'之间的字符串，即为json字符串
//                    result = result.substring(result.indexOf("{"), result.lastIndexOf("}") + 1);
//                    System.out.println(result);
//                    JSONObject jo = JSONObject.parseObject(result);
//                    R<List<JSONObject>> recentListR = null;
//                    if (jo.get("start_time") != null ) {
//                        if (jo.get("start_time").equals("00:00")) {
//                            recentListR = remoteMeetingService.ableOrderList(devId, jo.getString("date"), null, null);
//                        } else {
//                            recentListR = remoteMeetingService.ableOrderList(devId, jo.getString("date"), null, jo.getString("start_time"));
//                        }
//                        if (recentListR.isOk()) {
//                            jo.put("start_time",recentListR.getData().get(0).get("startTime"));
//                            jo.put("location",recentListR.getData().get(0).get("roomId"));
//                        }
//                    }
//
//                    return jo;
//                } catch (JSONException je) {
//                    // 返回结果错误，计日志，存log，返回空结果
//                    log.error(je.getMessage(),je);
//                    return null;
//                }
//
//            } catch (InterruptedException e) {
//                log.warn(e.getMessage());
//            }
            JSONArray ja = new JSONArray();
            R<List<JSONObject>> recentListR = null;
            recentListR = remoteMeetingService.ableOrderList(devId,null,null,null);
            if (recentListR.isOk()) {
                recentListR.getData().forEach(item->{
                    JSONObject tJson = new JSONObject();
                    tJson.put("start_time",item.get("startTime"));
                    tJson.put("location",item.get("roomId"));
                    tJson.put("date",item.get(("orderDate")));
                    tJson.put("duration_hours",0.5);
                    ja.add(tJson);
                });
                JSONObject result = new JSONObject();
                result.put("data",ja);
                return result;
            }
        }
        return null;
    }
}