import trio
import os
from py_ipfs_lite.config import Config
from py_ipfs_lite.peer import Peer
import logging
from multiaddr import Multiaddr

logging.basicConfig(level=logging.INFO)
# logging.getLogger("libp2p").setLevel(logging.WARNING)

async def run_test(nursery, peer):
    import time
    start_time = trio.current_time()
    
    peer_addr = "/ip4/52.7.200.90/udp/4001/quic-v1/p2p/12D3KooWS9GDjG635iEMB2Zz3iSXpxgPhNNpmDCuo4ynSkitoyut"
    print(f"Bootstrapping with: {peer_addr}")
    await peer.bootstrap([peer_addr])
    
    print("Waiting 40 seconds to see if connection drops...")
    for i in range(40):
        await trio.sleep(1)
        if peer.connection_tracker:
            for c in peer.connection_tracker.get_all_stats():
                if "12D3KooWS9GDjG635iEMB2Zz3iSXpxgPhNNpmDCuo4ynSkitoyut" in c.peer_id:
                    if c.current_connections == 0:
                        print(f"[{i}s] Connection is DEAD! duration: {trio.current_time() - start_time:.2f}s")
                        os._exit(0)
                    else:
                        print(f"[{i}s] Connection is ALIVE")
                        
    print("Connection survived!")
    os._exit(0)

async def main():
    print("Creating Config...")
    config = Config()
    
    import shutil
    shutil.rmtree("/tmp/ipfs-quic-test", ignore_errors=True)
    os.makedirs("/tmp/ipfs-quic-test", exist_ok=True)
    config.blockstore_path = "/tmp/ipfs-quic-test"
    
    listen_addrs = [Multiaddr("/ip4/0.0.0.0/udp/4005/quic-v1")]
    
    print("Creating Peer...")
    peer = Peer(config, listen_addrs=listen_addrs)
    
    async with trio.open_nursery() as nursery:
        nursery.start_soon(peer.start)
        await trio.sleep(1) # give it time to start
        nursery.start_soon(run_test, nursery, peer)

trio.run(main)
