// Node.js 22+; server-side only. Install: npm install cosmicephemeris@0.5.0
// Set COSMICEPHEMERIS_KEY privately. No automatic retries.
import { mkdir, writeFile } from "node:fs/promises";
import { CosmicEphemeris, CosmicEphemerisError } from "cosmicephemeris";

// Optional first argument: an explicit UTC date, for example 2026-10-28.
// Without it, use today's UTC date at 12:00 UTC (not the current instant).
const transitDate = process.argv[2] ?? new Date().toISOString().slice(0, 10);
const output = "transit-chart-output";
try {
  if (!/^\d{4}-\d{2}-\d{2}$/.test(transitDate)) {
    console.error("Use a date in YYYY-MM-DD format.");
    process.exit(1);
  }
  const api = new CosmicEphemeris();
  await mkdir(output, { mode: 0o700 });
  const chart = await api.transitSvg({
    birth: {
      date: "1990-01-01", time: "12:00", timezone: "America/New_York",
      lat: 40.7128, lon: -74.006,
    },
    transitDate, transitTime: "12:00", timezone: "UTC",
    zodiac: "tropical", house_system: "equal",
    theme: "dark", show_aspects: true,
  });
  await writeFile(`${output}/transits.svg`, chart.svg, {
    encoding: "utf8", flag: "wx", mode: 0o600,
  });
  console.log(`Created transit-chart-output/transits.svg for ${transitDate} at 12:00 UTC.`);
} catch (error) {
  if (error instanceof CosmicEphemerisError) {
    console.error("API request failed:", error.code, error.status ?? "");
  } else if (error?.code === "EEXIST") {
    console.error("Output folder already exists. Rename it before another run.");
  } else {
    console.error("Could not finish. Check the input and folder permissions.");
  }
  process.exitCode = 1;
}
