from sqlalchemy import Column, Integer, String

from fastapi import Depends
from .db import Base

class UserDatabase(Base):#класс пользователя
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)#айди пользователя
    phone = Column(Integer, nullable=True)#номер телефона пользователя
    email = Column(String)#электронная почта пользователя
    password = Column(String) # пароль
    hashed_password = Column(String) 
    name = Column(String, nullable=True)#имя пользователя
    surname = Column(String)#фамилия пользователя


class Announcement(Base): #класс объявления
    __tablename__ = "announcements"

    id = Column(Integer, primary_key=True, index=True)#айди объявления
    user_id = Column(Integer)#айди создателя объявления
    name = Column(String) # название объявления
    category = Column(String)#категория продукта из объявления
    best_by = Column(Integer)#срок годности продукта из объявления
    address = Column(String)
    longtitude = Column(Integer)
    latitude = Column(Integer)
    description = Column(String)#описание продукта в объявлении
    src = Column(String, nullable=True) #изображение продукта в объявлении
    metro = Column(String)#ближайщее метро от адреса нахождения продукта
    trashId = Column(Integer, nullable=True)
    booked_by = Column(Integer)#статус бронирования (либо -1, либо айди бронирующего)


class Trashbox(Base):#класс мусорных баков
    __tablename__ = "trashboxes"

    id = Column(Integer, primary_key=True, index=True)#айди 
    name = Column(String, nullable=True)#имя пользователя
    address = Column(String)
    latitude = Column(Integer)
    longtitude = Column(Integer)
    category = Column(String)#категория продукта из объявления
    

# from typing import AsyncGenerator
# from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
# from fastapi_users.db import SQLAlchemyBaseUserTableUUID, SQLAlchemyUserDatabase
# # This function can be called during the initialization of the FastAPI app.
# async def create_db_and_tables():
#     async with engine.begin() as conn:
#         await conn.run_sync(Base.metadata.create_all)


# async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
#     async with async_session_maker() as session:
#         yield session


# async def get_user_db(session: AsyncSession = Depends(get_async_session)):
#     yield SQLAlchemyUserDatabase(session, User)