package com.seer.teach.teacher.service.prompt.impl;

import com.seer.teach.common.enums.MessageEnums;
import com.seer.teach.teacher.common.llm.resp.ProcessUploadResult;
import com.seer.teach.teacher.common.llm.sse.req.Message;
import com.seer.teach.teacher.common.llm.sse.req.Text;
import com.seer.teach.teacher.service.AiModelCallService;
import com.seer.teach.teacher.service.platform.LlmResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 题目完整性校验服务实现类。
 * <p>
 * 该类用于判断上传的图片中是否包含完整的题目信息。通过调用大模型接口分析 OCR 结果及对应图像，
 * 判断每道题目的图像是否满足“题目完整”的标准，并将符合要求的结果返回。
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class CorrectLostPointService extends BasePromptService {

    private final AiModelCallService aiModelCallService;


    @Override
    public String getModule() {
        return "correctLostPoint";
    }

    @Override
    public String getFunctionName() {
        return "解析题目失分点";
    }

    @Override
    public Integer getRoleId() {
        return 5;
    }


    public String lostPoint(Integer userId,
                                 String ocrText,
                                 ProcessUploadResult processUploadResult) {
        List<Message> messages = getMessages(ocrText, processUploadResult);
        LlmResponse llmResponse = aiModelCallService.callModel(getModule(), messages, null, userId);
        return llmResponse.getChoices().get(0).getMessage().getContent();

    }

    @NotNull
    private List<Message> getMessages(String ocrText, ProcessUploadResult processUploadResult) {
        Map<String, List<Text>> prompt = this.generatePromptMessages();
        List<Text> userTexts = prompt.get(MessageEnums.USER.getMessage());
        List<Text> systemTexts = prompt.get(MessageEnums.SYSTEM.getMessage());
        userTexts.addAll(Text.text(ocrText));
        userTexts.add(Text.imageUrl(processUploadResult.getImage_url().getUrl()));
        Message systemMessage = Message.system(systemTexts);
        Message userMessage = Message.user(userTexts);
        List<Message> messages = new ArrayList<>();
        messages.add(systemMessage);
        messages.add(userMessage);
        return messages;
    }

}
