import asyncio
import httpx
from pathlib import Path

COUNTRIES = [
    "ad","ae","af","ag","ai","al","am","ao","aq","ar","as","at","au","aw","ax","az",
    "ba","bb","bd","be","bf","bg","bh","bi","bj","bl","bm","bn","bo","bq","br","bs","bt","bv","bw","by","bz",
    "ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cu","cv","cw","cx","cy","cz",
    "de","dj","dk","dm","do","dz",
    "ec","ee","eg","eh","er","es","et",
    "fi","fj","fk","fm","fo","fr",
    "ga","gb","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy",
    "hk","hm","hn","hr","ht","hu",
    "id","ie","il","im","in","io","iq","ir","is","it",
    "jm","jo","jp",
    "ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz",
    "la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly",
    "ma","mc","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz",
    "na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz",
    "om",
    "pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py",
    "qa",
    "re","ro","rs","ru","rw",
    "sa","sb","sc","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","ss","st","sv","sx","sy","sz",
    "tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tr","tt","tv","tw","tz",
    "ua","ug","um","us","uy","uz",
    "va","vc","ve","vg","vi","vn","vu",
    "wf","ws",
    "ye","yt",
    "za","zm","zw"
]

BASE_URL = "https://www.forex.se/dist/client/default/assets/flags/"
SAVE_DIR = Path("./flags")
SAVE_DIR.mkdir(exist_ok=True)

async def download_flag(client, code):
    url = f"{BASE_URL}{code}.svg"
    save_path = SAVE_DIR / f"{code}.svg"

    try:
        resp = await client.get(url)
        if resp.status_code == 200:
            save_path.write_bytes(resp.content)
            print(f"[OK] {code}.svg")
        else:
            print(f"[MISS] {code}.svg (status: {resp.status_code})")
    except Exception as e:
        print(f"[ERR] {code}.svg → {e}")

async def main():
    async with httpx.AsyncClient(timeout=10) as client:
        tasks = [download_flag(client, c) for c in COUNTRIES]
        await asyncio.gather(*tasks)

if __name__ == "__main__":
    asyncio.run(main())

