import asyncio
import sys
from datetime import datetime, timedelta, timezone
from sqlalchemy import select
from app.db.database import AsyncSessionLocal
from app.models.utilisateur import Utilisateur, Session as UserSession
from app.core.security import create_access_token
from httpx import AsyncClient
from app.main import app

async def main():
    async with AsyncSessionLocal() as db:
        # Get the admin/supervisor user
        admin = (await db.execute(select(Utilisateur).where(Utilisateur.email == "admin@inphb.ci"))).scalar_one_or_none()
        if not admin:
            print("Admin user not found!")
            return
        
        # Create a session & token for them
        import uuid
        jti = str(uuid.uuid4())
        session = UserSession(
            id=uuid.uuid4(),
            utilisateur_id=admin.id,
            jti=jti,
            est_actif=True,
            date_expiration=datetime.now(timezone.utc) + timedelta(days=1)
        )
        db.add(session)
        await db.commit()
        
        token = create_access_token(data={"sub": str(admin.id), "jti": jti})
        print(f"Logged in as: {admin.email} (ID: {admin.id}, Role: {admin.type_utilisateur})")
        print(f"Token: {token[:20]}...")

        # Request /api/v1/dossiers
        async with AsyncClient(app=app, base_url="http://test") as ac:
            headers = {"Authorization": f"Bearer {token}"}
            response = await ac.get("/api/v1/dossiers", headers=headers)
            print(f"\nResponse Status: {response.status_code}")
            
            data = response.json()
            items = data.get("items", [])
            print(f"Total returned cases: {len(items)}")
            
            # Print references and assignedTo values
            for idx, item in enumerate(items):
                print(f"[{idx}] Ref: {item.get('reference')} | Statut: {item.get('statut')} | gestionnaireId: {item.get('gestionnaireId')} | gestionnaireNom: {item.get('gestionnaireNom')}")

if __name__ == "__main__":
    if sys.platform == 'win32':
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    asyncio.run(main())
