from pydantic import BaseModel
from typing import Annotated, Union
from datetime import date
from typing import List

class Book(BaseModel):
    id: int
    

class DelAnnouncement(BaseModel):
    id: int


class Announcement(BaseModel):
    id: int
    user_id: int
    name: str
    category: str
    best_by: date
    address: str
    longtitude: float
    latitude: float
    description: str
    src: Union[str, None] = None #изображение продукта в объявлении
    metro: str #ближайщее метро от адреса нахождения продукта
    trashId: Union[int, None] = None
    booked_by: int #статус бронирования (либо -1, либо айди бронирующего)


class Token(BaseModel):
    access_token: str
    # token_type: str


class TokenData(BaseModel):
    user_id: Union[int, None] = None


class User(BaseModel):
    id: int
    email: str
    name: Union[str, None] = None
    surname: str
    disabled: Union[bool, None] = False
    items: list[Announcement] = []

    class Config:
        orm_mode = True
        arbitrary_types_allowed=True

class UserInDB(User):
    hashed_password: str

class Poem(BaseModel):
    title: str
    text: str
    author: str

class TrashboxBase(BaseModel):
    Name: str
    Lat: float
    Lng: float

class TrashboxResponse(TrashboxBase):
    Address: str
    Categories: List[str]

class TrashboxRequest(TrashboxBase):
    Category: str

class DisposeRequest(BaseModel):
    ann_id: int
    trashbox: TrashboxRequest