
from bson import ObjectId
from app.config.DB import db_manager
from app.modules.user.user_model import UserModel


class UserRepository:

    def get_collection(self):
        return db_manager.db["users"]

    async def create_user(self, user: UserModel):

        collection = self.get_collection()

        user_dict = user.model_dump()

        result = await collection.insert_one(user_dict)

        user_dict["_id"] = str(result.inserted_id)

        return user_dict

    async def find_by_phone(self, phone: str):

        collection = self.get_collection()

        user = await collection.find_one(
            {
                "phone": phone
            }
        )

        if user:
            user["_id"] = str(user["_id"])

        return user

    async def find_by_id(self, user_id: str):

        collection = self.get_collection()

        user = await collection.find_one(
            {
                "_id": ObjectId(user_id)
            }
        )

        if user:
            user["_id"] = str(user["_id"])

        return user

    async def update_user(self, user_id: str, data: dict):

        collection = self.get_collection()

        result = await collection.update_one(
            {
                "_id": ObjectId(user_id)
            },
            {
                "$set": data
            }
        )

        return result.modified_count > 0

    async def delete_user(self, user_id: str):

        collection = self.get_collection()

        result = await collection.delete_one(
            {
                "_id": ObjectId(user_id)
            }
        )

        return result.deleted_count > 0