from typing import TYPE_CHECKING

from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy.orm import as_declarative
from sqlalchemy.orm import declared_attr
from sqlalchemy.orm import Mapped
from .address import Address
from .user import User

if TYPE_CHECKING:
    from sqlalchemy.orm.decl_api import DeclarativeMeta


@as_declarative()
class Base:
    @declared_attr
    def __tablename__(self) -> Mapped[str]:
        return self.__name__.lower()

    id = Column(Integer, primary_key=True)


__all__ = ["User", "Address"]
