import trio
import sys
import logging
import os
from multiaddr import Multiaddr
from py_ipfs_lite.config import Config, BlockStoreType
from py_ipfs_lite.peer import Peer
from libp2p.crypto.ed25519 import create_new_key_pair
from libp2p.peer.peerinfo import info_from_p2p_addr

logging.basicConfig(level=logging.INFO)

async def main():
    config = Config(offline=True, blockstore_type=BlockStoreType.MEMORY)
    key_pair = create_new_key_pair()
    listen_addrs = [
        Multiaddr("/ip4/0.0.0.0/tcp/0"),
        Multiaddr("/ip4/0.0.0.0/udp/0/quic-v1")
    ]
    
    print("Creating peer (fresh memory store)...")
    peer = Peer(config, host_key=key_pair, listen_addrs=listen_addrs)
    await peer.start()
    
    target_addr_str = "/ip4/52.7.200.90/udp/4001/quic-v1/p2p/12D3KooWS9GDjG635iEMB2Zz3iSXpxgPhNNpmDCuo4ynSkitoyut"
    print(f"Connecting to {target_addr_str}...")
    
    try:
        maddr = Multiaddr(target_addr_str)
        info = info_from_p2p_addr(maddr)
        await peer.host.connect(info)
        print("Connected successfully to PROD over QUIC!")
        
        # Check connection stats
        connections = peer.host.get_network().connections.get(info.peer_id, [])
        print(f"Active connections to PROD node: {len(connections)}")
        
        print("Keeping connection alive for 15 seconds to show it doesn't drop immediately...")
        await trio.sleep(15)
        print("Still connected!")
        
    except Exception as e:
        print(f"Error connecting: {e}")
    finally:
        await peer.close()
        sys.exit(0)

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