// src/views/finance/utils/common.js

import { ref } from "vue";
// 【新增】引入获取全局 Signal 的方法
import { getAbortSignal } from "@/api/finance/service.js";

export const useChartInterpretation = () => {
	const loading = ref(false);
	const interpretation = ref("");
	const error = ref(null);

	const interpret = async text => {
		loading.value = true;
		error.value = null;
		interpretation.value = "";

		// 【新增】在请求发起前获取当前的 Signal
		// 注意：必须在每次调用 interpret 时重新获取，以确保拿到最新的 controller 的 signal
		const signal = getAbortSignal();

		try {
			// 【修改】在 fetch 中传入 signal
			const response = await fetch("/aiAnalysis/chart_interpretation", {
				method: "POST",
				headers: {
					"X-API-Key": "aircasKEY19491001", 
					"Content-Type": "application/json"
				},
				body: JSON.stringify({ text }),
				signal: signal // 【关键】绑定取消信号
			});

			if (!response.ok) {
				throw new Error(`HTTP error! status: ${response.status}`);
			}

			const reader = response.body.getReader();
			const decoder = new TextDecoder();
			let buffer = "";

			while (true) {
				// reader.read() 会在 signal abort 时抛出 AbortError
				const { done, value } = await reader.read();
				if (done) break;

				buffer += decoder.decode(value, { stream: true });
				const lines = buffer.split("\n");
				buffer = lines.pop() || "";

				for (const line of lines) {
					if (line.startsWith("data: ")) {
						const content = line.substring(6);
						// 尝试解析 JSON
						try {
                            const jsonMatch = content.match(/\{.*\}/);
                            if (jsonMatch) {
                                const parsed = JSON.parse(jsonMatch[0]);
                                if (parsed["解读"]) {
                                    interpretation.value = parsed["解读"];
                                }
                            } else {
                                // 兼容旧的正则匹配
                                const textMatch = content.match(/"解读":\s*"([^"]*)"/);
                                if (textMatch && textMatch[1]) {
                                    interpretation.value = textMatch[1];
                                }
                            }
                        } catch (e) {
                            // 忽略解析错误
                        }
					}
				}
			}
		} catch (err) {
			// 【关键】判断是否是因路由切换导致的取消
			if (err.name === 'AbortError') {
				console.log('AI 解读请求已取消');
				loading.value = false; // 关闭 loading
				return; // 直接返回，不设置 error，不弹窗
			}

			error.value = err.message || "AI 解读失败";
			console.error("AI Chart Interpretation Error:", err);
		} finally {
			// 只有在非 AbortError 的情况下，才由 finally 统一关闭 loading
            // 如果上面 catch 中已经 return 了，这里不会执行
            if (err?.name !== 'AbortError') {
                 loading.value = false;
            }
		}
	};

	return {
		loading,
		interpretation,
		error,
		interpret
	};
};