import asyncio,os
from datetime import datetime,timezone
import httpx
from sqlalchemy.dialects.mysql import insert
from .database import CandleRow,Session,init_db

async def fetch(symbol_id:int,feed:str,outputsize:int=5000):
    key=os.environ["TWELVE_DATA_API_KEY"]
    async with httpx.AsyncClient(timeout=30) as client:
        response=await client.get("https://api.twelvedata.com/time_series",params={"symbol":feed,"interval":"1min","outputsize":outputsize,"timezone":"UTC","apikey":key})
        response.raise_for_status(); payload=response.json()
    if payload.get("status")=="error": raise RuntimeError(payload.get("message","Twelve Data backfill failed"))
    with Session.begin() as db:
        for row in payload.get("values",[]):
            ts=int(datetime.fromisoformat(row["datetime"]).replace(tzinfo=timezone.utc).timestamp())
            db.execute(insert(CandleRow).values(symbol_id=symbol_id,timeframe="1m",timestamp=ts,open=float(row["open"]),high=float(row["high"]),low=float(row["low"]),close=float(row["close"]),volume=float(row["volume"]) if row.get("volume") else None,provider="twelvedata").prefix_with("IGNORE"))
    return len(payload.get("values",[]))

if __name__=="__main__":
    import argparse
    parser=argparse.ArgumentParser();parser.add_argument("symbol_id",type=int);parser.add_argument("feed");args=parser.parse_args();init_db();print(asyncio.run(fetch(args.symbol_id,args.feed)))
