from apps.config import settings
from apps.models import crud
from apps.models.user import User, UserCreate
from sqlmodel import Session, SQLModel, create_engine, select

# postgres
engine = create_engine(str(settings.SQLALCHEMY_DATABASE_URI))


async def initiate_nongo():
    client = AsyncIOMotorClient(Settings().DATABASE_URL)
    await init_beanie(
        database=client.get_default_database(), document_models=models.__all__
    )


async def initate_postgres(session: Session) -> None:
    """
    init db
    :param session: database session
    """
    # Base.metadata.create_all(bind=engine)
    SQLModel.metadata.create_all(bind=engine)
    user = session.exec(
        select(User).where(User.email == settings.FIRST_SUPERUSER)
    ).first()
    # 插入管理员账户
    if not user:
        user_in = UserCreate(
            email=settings.FIRST_SUPERUSER,
            password=settings.FIRST_SUPERUSER_PASSWORD,
            is_superuser=True,
        )
        user = crud.create_user(session=session, user_create=user_in)


async def initate_redis():
    await init_redis(app=app, settings=settings)


async def initate_sqlite():
    await init_sqlite(app=app, settings=settings)