"""تست آفلاین منطق ربات با پلتفرم جعلی (بدون نیاز به روبیکا)."""
import asyncio, os
import config
config.DB_PATH = "test.db"
from core import Core
from db import DB

class Fake:
    def __init__(s): s.out=[]; s.admins={"A"}
    async def send(s,c,t,r=None): s.out.append(t)
    async def delete(s,c,m): s.out.append(f"[del {m}]")
    async def ban(s,c,u): s.out.append(f"[ban {u}]")
    async def is_admin(s,c,u): return u in s.admins
    async def members(s,c): return [("A","a","Ali"),("B",None,"Bob")]
    async def is_joined(s,c,u): return True

async def main():
    if os.path.exists("test.db"): os.remove("test.db")
    p = Fake(); core = Core(p, DB("test.db"))
    async def say(u,n,t,r=None,m=1): await core.handle("G",u,n,t,m,r)
    for kind in ["شروع تاس","شروع پنالتی","شروع سنگ کاغذ قیچی"]:
        await say("B","Bob",kind); await say("B","Bob","50")
        word={"شروع تاس":"تاس","شروع پنالتی":"پنالتی"}.get(kind,"شرکت")
        await say("C","Cat",word)
        for i in range(30):
            g=core.games.active("G")
            if not g: break
            if kind=="شروع پنالتی":
                sh,kp=core.games._roles(g)
                await say(sh,"x","چپ"); await say(kp,"y","راست")
            elif kind=="شروع سنگ کاغذ قیچی":
                await say("B","Bob","سنگ"); await say("C","Cat","کاغذ")
    print("\n".join(p.out[-12:]))
    print("coins B/C:", core.db.coins("B"), core.db.coins("C"))
    p.out.clear()
    await say("A","Ali","اخطار",r="B"); await say("A","Ali","اخطار",r="B"); await say("A","Ali","اخطار",r="B")
    await say("A","Ali","سکوت 5",r="C"); await say("C","Cat","سلام",m=9)
    await say("A","Ali","تگ همه سلام")
    print("\n".join(p.out))
    os.remove("test.db")
if __name__ == "__main__": asyncio.run(main())
