from sqlalchemy import Column, Integer, String, Boolean, Float, DateTime, Date, ForeignKey
from fastapi import Depends
from .db import Base, engine
from sqlalchemy.orm import relationship


# class User(SQLAlchemyBaseUserTableUUID, Base):
#     name = Column(String, nullable=True)#имя пользователя



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

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

    items = relationship("Announcement", back_populates="owner")

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

    id = Column(Integer, primary_key=True, index=True)#айди объявления
    owner_id = Column(Integer, ForeignKey("users.id"))#айди создателя объявления
    name = Column(String) # название объявления
    category = Column(String)#категория продукта из объявления
    best_by = Column(Date)#срок годности продукта из объявления
    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, либо айди бронирующего)

    owner = relationship("User", back_populates="items")


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)#категория продукта из объявления
    

class Poems(Base):#класс поэзии
    __tablename__ = "poems"

    id = Column(Integer, primary_key=True, index=True)  #айди 
    poem_name = Column(String) # название стихотворения
    poem_text = 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)