import asyncio
import re
import aiohttp
import ssl
import certifi

SSL_CTX = ssl.create_default_context(cafile=certifi.where())

async def resolve_uid_with_avatar(username):
    url = f"https://locket.cam/{username}"
    headers = {
        "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)",
        "Accept": "text/html"
    }
    
    try:
        async with aiohttp.ClientSession() as session:
            async with session.get(url, headers=headers, allow_redirects=True, timeout=10, ssl=SSL_CTX) as res:
                html = await res.text()
                redirect_url = str(res.url)
                print("Redirect URL:", redirect_url)

                def extract(text):
                    if not text: return None
                    m = re.search(r'/invites/([A-Za-z0-9]{28})', text)
                    if m: return m.group(1)
                    
                    lp = re.search(r'link=([^\s"\'>]+)', text)
                    if lp:
                        try:
                            # Basic URL decode without urllib
                            d = lp.group(1).replace('%3A', ':').replace('%2F', '/')
                            dm = re.search(r'/invites/([A-Za-z0-9]{28})', d)
                            if dm: return dm.group(1)
                        except:
                            pass
                    return None

                uid = extract(redirect_url) or extract(html)
                print("Extracted UID:", uid)
                return uid
    except Exception as e:
        print("Error:", e)
        return None

asyncio.run(resolve_uid_with_avatar("hihi"))
