# from app.config.DB import db_manager
# from bson import ObjectId
# from app.modules.user.user_model import UserModel


# class UserRepository:

#     def __init__(self):
#         self.collection_name = "users"

#     def get_collection(self):
#         return db_manager.db[self.collection_name]

#     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()
        
#         return await collection.find_one(
#             {
#                 "phone": phone  
#             }
            
#         )
    
#     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



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