import { escapeHtml } from './security.js';
const DEFAULT_QUESTION = '请按高严谨流程做盲推解盘,先列 Technique Audit Table,再给结论。';
const DEFAULT_THEMES = ['career', 'relationship', 'finance', 'health', 'timing'];
export function renderProfessionalReadingPanel(state = {}) {
const status = state.gatewayStatus || {};
const result = state.result?.professional_reading || null;
return `
Web Professional Reading v1
${escapeHtml(status.active_backend || 'gateway-ready')}
${renderMetric('Technique Audit Table', 'required', '必须显示 Functional Benefic/Malefic、MEVG、Real Case Calibration。')}
${renderMetric('MEVG / Global Web Evidence', 'queued-or-blocked', '外部资料采集必须进入队列或说明 blocked。')}
${renderMetric('Real Case Calibration', 'required', '找不到相似案例时必须降级,不得静默跳过。')}
${renderMetric('VedAstro Gateway Boundary', status.mode || 'local_first', '普通中国大陆用户不需要浏览器直连 VedAstro。')}
${escapeHtml(state.message || '等待运行。')}
${result ? renderProfessionalReadingResult(result) : ''}
`;
}
export function buildProfessionalReadingPayload(chartData = {}, overrides = {}) {
const birth = window.__jyotishBirth || chartData.birth_info || chartData.birth || {};
return {
year: Number(birth.year || birth.date?.slice?.(0, 4) || overrides.year || REDACTED_YEAR),
month: Number(birth.month || birth.date?.slice?.(5, 7) || overrides.month || 1),
day: Number(birth.day || birth.date?.slice?.(8, 10) || overrides.day || 1),
hour: Number(birth.hour ?? overrides.hour ?? 12),
minute: Number(birth.minute ?? overrides.minute ?? 0),
second: Number(birth.second ?? overrides.second ?? 0),
lat: Number(birth.lat ?? overrides.lat ?? 0),
lon: Number(birth.lon ?? overrides.lon ?? 0),
tz: Number(birth.tz ?? overrides.tz ?? 8),
question: overrides.question || DEFAULT_QUESTION,
themes: overrides.themes || DEFAULT_THEMES,
reference_date: overrides.reference_date || new Date().toISOString().slice(0, 10),
blind_mode: overrides.blind_mode ?? true,
disable_life_event_feedback: overrides.disable_life_event_feedback ?? true,
};
}
export function bindProfessionalReadingPanel(container, chartData = null, setState = () => {}) {
container?.querySelector('[data-action="professional-reading-gateway"]')?.addEventListener('click', async () => {
setState({ message: '正在刷新 VedAstro Gateway...' });
const gatewayStatus = await window.JyotishAPI.getVedAstroGatewayStatus();
setState({ gatewayStatus, message: 'VedAstro Gateway 状态已刷新。' });
});
container?.querySelector('[data-action="professional-reading-run"]')?.addEventListener('click', async () => {
setState({ message: '正在运行专业解盘代理...' });
const payload = buildProfessionalReadingPayload(chartData);
const result = await window.JyotishAPI.runProfessionalReading(payload);
setState({ result, gatewayStatus: result?.professional_reading?.vedastro_gateway?.gateway_status || {}, message: '专业解盘包已生成。' });
});
}
function renderMetric(label, value, note) {
return `
${escapeHtml(label)}
${escapeHtml(value)}
${escapeHtml(note)}
`;
}
function renderProfessionalReadingResult(result) {
const gateway = result.vedastro_gateway || {};
const controls = result.user_led_calibration_controls || {};
const requiredRows = result.technique_audit_table_required_rows || [];
return `
Professional Reading Packet
status: ${escapeHtml(gateway.status || 'unknown')}
blind_mode: ${escapeHtml(String(Boolean(controls.blind_mode)))}
${requiredRows.map(row => `- ${escapeHtml(row)}
`).join('')}
`;
}