from sqlalchemy.ext.asyncio import AsyncSession
from app.models.gamification import UserStats, PointsLedger
from sqlalchemy import select

class GamificationService:
    @staticmethod
    async def award_points(db: AsyncSession, user_id: int, points: int, reason: str):
        """Pontok jóváírása és a UserStats frissítése"""
        
        # 1. Bejegyzés a naplóba (Mezőnevek szinkronizálva a modellel)
        new_entry = PointsLedger(
            user_id=user_id,
            points_change=points,
            reason=reason
        )
        db.add(new_entry)
        
        # 2. Összesített statisztika lekérése/létrehozása
        result = await db.execute(select(UserStats).where(UserStats.user_id == user_id))
        stats = result.scalar_one_or_none()
        
        if not stats:
            # Ha új a user, létrehozzuk az alap statisztikát
            stats = UserStats(
                user_id=user_id, 
                total_points=0, 
                current_level=1
            )
            db.add(stats)
            
        # 3. Pontok hozzáadása
        stats.total_points += points
        
        # Itt fogjuk később meghívni a szintlépési logikát
        # await GamificationService._check_level_up(stats)
        
        # Fontos: Nem commitolunk itt, hanem hagyjuk, hogy a hívó (SocialService) 
        # egy tranzakcióban mentse el a szolgáltatót és a pontokat!
        await db.flush() 
        return stats.total_points