print("database.py loaded")

import motor.motor_asyncio
from datetime import datetime

from config import DB_URI, DB_NAME


class Database:

    def __init__(self):
        self.client = None
        self.db = None
        self.users = None

    # =========================
    # CONNECT
    # =========================
    async def connect(self):
        if self.client:
            return

        try:
            self.client = motor.motor_asyncio.AsyncIOMotorClient(DB_URI)
            await self.client.admin.command("ping")

            self.db = self.client[DB_NAME]
            self.users = self.db["users"]

            print("MongoDB Connected")

        except Exception as e:
            print("MongoDB ERROR:", e)
            self.client = None
            self.db = None
            self.users = None

    # =========================
    # ADD USER
    # =========================
    async def add_user(self, user_id: int):
        if not self.users:
            return

        try:
            exists = await self.users.find_one({"_id": user_id})

            if not exists:
                await self.users.insert_one({
                    "_id": user_id,
                    "joined_at": datetime.utcnow(),
                    "downloads": 0
                })

        except Exception as e:
            print("ADD USER ERROR:", e)

    # =========================
    # ADD DOWNLOAD
    # =========================
    async def add_download(self, user_id: int):
        if not self.users:
            return

        try:
            await self.users.update_one(
                {"_id": user_id},
                {"$inc": {"downloads": 1}},
                upsert=True
            )

        except Exception as e:
            print("ADD DOWNLOAD ERROR:", e)


db = Database()