from app.config.DB import db_manager
from datetime import datetime, time

class DeviceLimitRepository:
    def __init__(self):
        self.collection_name = "deviceLimits"

    def get_collection(self):
        return db_manager.db[self.collection_name]

    async def check_and_increment_limit(self, device_id: str) -> bool:
        """
        True return karega agar limit ke andar hai (Process allowed).
        False return karega agar 5 ki limit cross ho chuki hai.
        """
        collection = self.get_collection()
        today_start = datetime.combine(datetime.utcnow().date(), time.min)
        
        # Check karo kya ye device pehle se DB me hai?
        device = await collection.find_one({"device_id": device_id})
        
        if not device:
            # Pehli baar aaya hai, entry banao aur count 1 set karo
            await collection.insert_one({
                "device_id": device_id,
                "free_count": 1,
                "last_used_at": datetime.utcnow()
            })
            return True
            
        # Agar purana device hai, check karo kya din badal gaya?
        if device["last_used_at"] < today_start:
            # Naya din hai! Count reset karke 1 kar do
            await collection.update_one(
                {"device_id": device_id},
                {"$set": {"free_count": 1, "last_used_at": datetime.utcnow()}}
            )
            return True
            
        # Agar same day hai, check karo ki 5 se zyada to nahi ho gaya
        if device["free_count"] >= 5:
            return False # Limit reached!
            
        # Limit ke andar hai, to count +1 badha do
        await collection.update_one(
            {"device_id": device_id},
            {"$inc": {"free_count": 1}, "$set": {"last_used_at": datetime.utcnow()}}
        )
        return True