from datetime import datetime

from ninja import FilterSchema, ModelSchema
from pydantic import Field

from club.schemas import ClubSchema
from core.schemas import SimpleUserSchema
from reservation.models import ReservationSlot, Room


class RoomFilterSchema(FilterSchema):
    club: set[int] | None = Field(None, q="club_id__in")


class RoomSchema(ModelSchema):
    class Meta:
        model = Room
        fields = ["id", "name", "description", "location"]

    club: ClubSchema


class SlotFilterSchema(FilterSchema):
    after: datetime = Field(default=None, q="end_at__gt")
    before: datetime = Field(default=None, q="start_at__lt")
    room: set[int] | None = None
    club: set[int] | None = None


class SlotSchema(ModelSchema):
    class Meta:
        model = ReservationSlot
        fields = ["id", "room", "nb_people", "comment"]

    start: datetime = Field(alias="start_at")
    end: datetime = Field(alias="end_at")
    author: SimpleUserSchema