package main

import (
	"errors"
	"fmt"
	"github.com/ssgo/httpclient"
	"github.com/ssgo/log"
	"github.com/ssgo/u"
	"strings"
	"time"
)

func checkImg(imgStr string) error {
	text := OCR(u.UnBase64(strings.Split(imgStr, "base64,")[1]))
	if text == "" {
		return errors.New("text is empty")
	}
	log.DefaultLogger.Info("checkImg", "imgStrLen", len(imgStr), "imgLen", len(u.UnBase64(strings.Split(imgStr, "base64,")[1])), "text", text)
	score, err := parseRiskScore(ask(buildImgDetectionPrompt(text)))
	if err != nil {
		log.DefaultLogger.Error("parseImgResp error", "err", err)
		return err
	}
	err = conn.WriteJSON(map[string]any{
		"type": "imageResult",
		"result": map[string]any{
			"score":        score,
			"isSuspicious": score >= 50,
		},
	})
	if err != nil {
		log.DefaultLogger.Error("sendImgScore Error", "err", err)
		return err
	}
	log.DefaultLogger.Info("sendImgScore")
	return nil
}

func OCR(file []byte) string {
	resMap := httpclient.GetClient(time.Second*30).Post("https://api.textin.com/ai/service/v2/recognize/multipage", file, "x-ti-app-id", "d367747801bba61cd45026ebee91c784", "x-ti-secret-code", "f79c9c361d7bdb92195bd8c63bedffa0").Map()
	res := struct {
		Result struct {
			Pages []struct {
				Lines []struct {
					Text string
				} `json:"lines"`
			} `json:"pages"`
		} `json:"result"`
	}{}
	//log.DefaultLogger.Info("Result", "", resMap)
	//log.DefaultLogger.Error("ocrres err111", "err", errors.New(u.BRed(resMap["message"])), "rescode", reflect.TypeOf(resMap["code"]).String(), "rescod1e", reflect.TypeOf(resMap["code"]).Kind())
	if u.Int(resMap["code"]) != 200 {
		log.DefaultLogger.Error("ocrres err", "err", errors.New(u.BRed(resMap["message"])), "rescode", resMap["code"])
		fmt.Println(u.BRed(resMap["message"]))
		return ""
	}
	str := ""
	u.Convert(resMap, &res)
	if len(res.Result.Pages) < 1 {
		log.DefaultLogger.Error("no characters recognized")
		return ""
	}
	for _, k := range res.Result.Pages[len(res.Result.Pages)-1].Lines {
		str += "" + k.Text
	}
	//log.DefaultLogger.Info("OCRResult", "Map", resMap, "Text", str)
	return str
}

func buildImgDetectionPrompt(content string) string {
	return fmt.Sprintf(`你是一名反诈骗专家，专门分析聊天记录，判断其中是否涉及诈骗信息。请仔细阅读以下文字，并回答以下问题：

1. 这段内容是否包含诈骗信息？如果是，请给出具体的诈骗类型（如刷单、冒充客服、杀猪盘等）。
2. 请分析这段内容是否具有诈骗话术，例如使用了“限时优惠”“保证赚钱”“不透露给别人”等常见诈骗用语。
3. 诈骗信息通常会使用哪些伎俩欺骗受害者？请指出可能的欺诈手法。
4. 请用简洁的语言（不超过100字）总结你的分析结果，并给出风险等级（低、中、高）。
5. 如果有必要，请建议用户如何避免被骗。

请返回JSON格式：
{
    "risk_score": 0-100，
    "risk_reason": "主要风险点"
}

待分析的文本如下：%s`, content)
}
