import os

from kerykeion import AstrologicalSubject, KerykeionChartSVG

from astrology import calculate_planets
from chart_utils import extract_wheel


def generate_birthday_chart(
    name,
    year,
    month,
    day,
    hour,
    minute,
    second,
    latitude,
    longitude,
    timezone
):
    safe_name = "".join(c for c in name if c.isalnum() or c in (" ", "-", "_")).strip() or "User"

    planet_data = calculate_planets(
        year,
        month,
        day,
        hour,
        minute,
        second,
        latitude,
        longitude,
        timezone
    )

    subject = AstrologicalSubject(
        name=safe_name,
        year=year,
        month=month,
        day=day,
        hour=hour,
        minute=minute,
        lat=latitude,
        lng=longitude,
        tz_str="Asia/Kolkata"
    )

    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    charts_dir = os.path.join(BASE_DIR, "charts", "birthchart")

    os.makedirs(charts_dir, exist_ok=True)

    # Generate chart
    chart = KerykeionChartSVG(
        subject,
        new_output_directory=charts_dir
    )

    chart.makeSVG()

    full_chart = os.path.join(
        charts_dir,
        f"{safe_name} - Natal Chart.svg"
    )

    wheel_chart = os.path.join(
        charts_dir,
        f"{safe_name}_Birth_Chart.svg"
    )

    # Extract wheel
    extract_wheel(full_chart, wheel_chart)

    return {
        "chart": f"/charts/birthchart/{safe_name}_Birth_Chart.svg",
        "planets": planet_data["planets"],  
        "ascendant": planet_data["ascendant"],
        "ascendant_sign": planet_data["ascendant_sign"],
        "moon_phase": planet_data.get("moon_phase"),
    }
