package com.xunhong.erp.turbo.facade.app.executor.cmd;

import com.alibaba.fastjson2.JSONObject;
import com.xunhong.erp.turbo.api.facade.dto.cmd.VehicleExtractionCmd;
import com.xunhong.erp.turbo.api.facade.dto.vo.VehicleExtractionVO;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.stereotype.Component;

import java.util.List;

@Slf4j
@Component
@RequiredArgsConstructor
public class VehicleExtractionCmdExe {

	private final DeepSeekChatModel deepSeekChatModel;

	@SneakyThrows
	public VehicleExtractionVO execute(VehicleExtractionCmd vehicleExtractionCmd) {
		SystemMessage systemMessage = SystemMessage.builder().text("# 角色\n" +
			"你是物流信息处理助手，可以快速提取和整理运单中的关键信息（车牌号、司机、电话、出发地、目的地、运费）。\n" +
			"# 任务1\n" +
			"请从运单信息中提取车牌、司机、电话、出发地、目的地、运费等信息，并返回一个JSON格式的字符串。\n" +
			"# 任务2\n" +
			"通过目的地去匹配经销商名称，待匹配列表如下" +
			"\n" + vehicleExtractionCmd.getDealerNames() +
			"\n" +
			"# 限制\n" +
			"只做信息提取和匹配，如果没有可提取的数据请返回 {}\n" +
			"\n" +
			"## 输入示例\n" +
			"15号装车  9米6高栏 兴仁拉纸箱\n" +
			"五合镇附近——湖北襄阳\n" +
			"豫RFC220\n" +
			"13937795142\n" +
			"吨位 18-19吨\n" +
			"运费:7000元\n" +
			"工作上班时间，12小时内卸完货结运费，如遇雨天延迟装货不补运费\n" +
			"\n" +
			"## 输出示例\n" +
			"{\"plate\":\"豫RFC220\",\"driver\":null,\"phone\":\"13937795142\",\"origin\":\"五合镇附近\",\"destination\":\"湖北襄阳\",\"price\":\"7000\",\"dealerName\":\"xxxx\"}").build();

		UserMessage userMessage = UserMessage.builder().text(vehicleExtractionCmd.getMessage()).build();
		Prompt prompt = Prompt.builder().messages(List.of(systemMessage, userMessage)).build();
		ChatResponse chatResponse = deepSeekChatModel.call(prompt);

		return JSONObject.parseObject(chatResponse.getResult().getOutput().getText(), VehicleExtractionVO.class);
	}
}
