from pymongo import MongoClient
from bson import ObjectId
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel

class PyObjectId(ObjectId):
    @classmethod
    def __get_validators__(cls):
        yield cls.validate

    @classmethod
    def validate(cls, v):
        if not ObjectId.is_valid(v):
            raise ValueError("Invalid ObjectId")
        return ObjectId(v)

class MongoDBManager:
    def __init__(self, mongodb_url: str, db_name: str):
        self.client = MongoClient(mongodb_url)
        self.db = self.client[db_name]
        
        # Initialize collections
        self.users = self.db.users
        self.businesses = self.db.businesses
        self.ai_assistants = self.db.ai_assistants
        
        # Create indexes
        self.users.create_index("email", unique=True)
        self.businesses.create_index("twilio_number", unique=True) 