"""
Download NASA POWER monthly climate data for all Tamil Nadu districts.
Saves: data/raw/nasa_power/nasa_power_tn.csv
Columns: district, year, month, tmin_c, tmax_c, humidity

Run from: C:\Crop_Prediction\Backend\crop-ai-system
Command:  python download_nasa.py
"""

import json
import os
import time

import pandas as pd
import requests


def main():
    # Load district coordinates from districts.json
    with open("data/lookup/districts.json") as f:
        districts = json.load(f)

    os.makedirs("data/raw/nasa_power", exist_ok=True)

    rows = []
    total = len(districts)

    for i, (name, info) in enumerate(districts.items(), 1):
        lat = info["lat"]
        lon = info["lon"]

        url = (
            "https://power.larc.nasa.gov/api/temporal/monthly/point"
            "?parameters=T2M_MIN,T2M_MAX,RH2M"
            "&community=AG"
            f"&longitude={lon}"
            f"&latitude={lat}"
            "&start=2001"
            "&end=2023"
            "&format=JSON"
        )

        try:
            r = requests.get(url, timeout=60)
            r.raise_for_status()
            data = r.json()["properties"]["parameter"]

            for ym, tmin in data["T2M_MIN"].items():
                if len(ym) != 6:
                    continue
                year  = int(ym[:4])
                month = int(ym[4:])
                rows.append({
                    "district": name,
                    "year":     year,
                    "month":    month,
                    "tmin_c":   round(float(tmin), 2),
                    "tmax_c":   round(float(data["T2M_MAX"][ym]), 2),
                    "humidity": round(float(data["RH2M"][ym]), 2),
                })

            print(f"[{i}/{total}] Done: {name} ({len(data['T2M_MIN'])} months)")
            time.sleep(1)  # be polite to the API

        except Exception as e:
            print(f"[{i}/{total}] FAILED: {name} — {e}")

    if not rows:
        print("ERROR: No data downloaded. Check internet connection.")
        return

    df = pd.DataFrame(rows)
    out = "data/raw/nasa_power/nasa_power_tn.csv"
    df.to_csv(out, index=False)

    print(f"\nSaved {len(df)} rows to {out}")
    print(f"Districts: {df['district'].nunique()}")
    print(f"Years: {df['year'].min()} - {df['year'].max()}")
    print(f"Sample:")
    print(df.head(3).to_string())


if __name__ == "__main__":
    main()