import React, { useState } from 'react';
const translations = {
en: {
title: "AstroTool - Detailed Jyotish Prediction",
name: "Name",
date: "Date",
time: "Time",
tzOffset: "Timezone Offset (e.g. +05:45)",
lat: "Latitude",
lon: "Longitude",
calculate: "Calculate",
reset: "Reset",
download: "Download JSON",
results: "Results",
loading: "Calculating...",
langSwitch: "Switch Language",
error: "Please fill all required fields.",
},
ne: {
title: "ज्योतिष टुल - विस्तृत फलादेश",
name: "नाम",
date: "मिति",
time: "समय",
tzOffset: "समय क्षेत्र (जस्तै +05:45)",
lat: "अक्षांश",
lon: "देशान्तर",
calculate: "गणना गर्नुहोस्",
reset: "रिसेट",
download: "डाउनलोड गर्नुहोस् JSON",
results: "परिणामहरू",
loading: "गणना हुँदैछ...",
langSwitch: "भाषा परिवर्तन गर्नुहोस्",
error: "कृपया सबै आवश्यक विवरणहरू भर्नुहोस्।",
}
};
export default function AstroTool() {
const [lang, setLang] = useState('ne');
const t = translations[lang];
const [inputs, setInputs] = useState({
name: '',
date: '',
time: '',
tzOffset: '+05:45',
lat: '27.7',
lon: '85.3',
});
const [loading, setLoading] = useState(false);
const [result, setResult] = useState(null);
function handleChange(e) {
setInputs({ ...inputs, [e.target.name]: e.target.value });
}
async function handleSubmit(e) {
e.preventDefault();
// Simple validation
if (!inputs.date || !inputs.time || !inputs.lat || !inputs.lon) {
alert(t.error);
return;
}
setLoading(true);
setResult(null);
try {
// Call backend API or local mock calculation here
// For demo, use a local mock:
const res = await mockAstroCalculation(inputs);
setResult(res);
} catch (err) {
alert(err.message || 'Error');
} finally {
setLoading(false);
}
}
function downloadJSON() {
if (!result) return;
const blob = new Blob([JSON.stringify(result, null, 2)], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url; a.download = `${result.name || 'astro'}-result.json`;
a.click();
URL.revokeObjectURL(url);
}
// Mock calculation function simulating backend response
async function mockAstroCalculation({ name, date, time, tzOffset, lat, lon }) {
// Simulate delay
await new Promise(r => setTimeout(r, 1000));
// Simple demo: calculate sun & moon lon approx by date difference from 2000-01-01
const baseDate = new Date(Date.UTC(2000, 0, 1, 12, 0, 0));
const userDate = new Date(`${date}T${time}:00`);
const diffDays = (userDate.getTime() - baseDate.getTime()) / (1000 * 60 * 60 * 24);
const sunLon = (280.460 + 0.9856474 * diffDays) % 360;
const moonLon = (218.316 + 13.176396 * diffDays) % 360;
// Ascendant approx from longitude
const ascSign = Math.floor((parseFloat(lon) / 30)) + 1;
const ascDegree = (parseFloat(lon) % 30).toFixed(2);
return {
name: name || 'Unknown',
date, time, tzOffset, lat, lon,
planets: {
Sun: { lon: sunLon.toFixed(2), sign: ascSign },
Moon: { lon: moonLon.toFixed(2), sign: ascSign }
},
ascendant: { sign: ascSign, degree: ascDegree },
panchang: {
tithi: Math.floor(((moonLon - sunLon + 360) % 360) / 12) + 1,
nakshatra: Math.floor((moonLon % 360) / (360 / 27)) + 1,
},
predictions: {
summary: 'यो एक नमूना ज्योतिष फलादेश हो। वास्तविक गणनाका लागि backend API जोड्नुहोस्।'
},
generatedAt: new Date().toISOString(),
};
}
return (
{t.title}
{result && (
{t.results}
{JSON.stringify(result, null, 2)}
)}
);
}
कोई टिप्पणी नहीं:
एक टिप्पणी भेजें