# from __future__ import annotations from sqlmodel import Field, Relationship, SQLModel from netbrite import Colors, Fonts, Priorities, ScrollSpeeds, Message # --- Message --- class MessageBase(SQLModel): activation_delay: int = 0 display_delay: int = 0 display_repeat: int = 0 priority: Priorities = Priorities.OVERRIDE sound_alarm: bool = False text: str = "" ttl: int = 0 # class MessageUpdate(SQLModel): # activation_delay: int | None = 0 # display_delay: int | None = 0 # display_repeat: int | None = 0 # priority: Priorities | None = Priorities.OVERRIDE # text: str | None = "" # ttl: int | None = 0 class MessageDB(MessageBase, table=True): id: int | None = Field(default=None, primary_key=True) zone: "ZoneDB" = Relationship( # pyright: ignore[reportAny] back_populates="default_message" ) class MessagePublic(MessageBase): id: int # --- Device --- class NetBriteBase(SQLModel): address: str = Field(unique=True, index=True) port: int = 700 class NetBriteUpdate(SQLModel): address: str = Field(unique=True, index=True) port: int = 700 class NetBriteDB(NetBriteBase, table=True): id: int | None = Field(default=None, primary_key=True) zones: list["ZoneDB"] = Relationship( # pyright: ignore[reportAny] back_populates="netbrite" ) class NetBritePublic(NetBriteBase): id: int zones: list["ZoneDB"] active: bool # --- Zone --- class ZoneBase(SQLModel): name: str x: int = 0 y: int = 0 width: int = 120 height: int = 7 scroll_speed: ScrollSpeeds = ScrollSpeeds.NORMAL pause_duration: int = 1000 volume: int = 4 default_font: Fonts = Fonts.NORMAL_7 default_color: Colors = Colors.RED class ZoneUpdate(SQLModel): name: str | None = None x: int | None = None y: int | None = None width: int | None = None height: int | None = None scroll_speed: ScrollSpeeds | None = ScrollSpeeds.NORMAL pause_duration: int | None = 1000 volume: int | None = 4 default_font: Fonts | None = Fonts.NORMAL_7 default_color: Colors | None = Colors.RED class ZoneDBBase(ZoneBase): default_message_id: int | None = Field(default=None, foreign_key="messagedb.id") netbrite_id: int = Field(default=None, foreign_key="netbritedb.id") class ZoneDB(ZoneDBBase, table=True): id: int | None = Field(default=None, primary_key=True) default_message: MessageDB | None = Relationship( # pyright: ignore[reportAny] back_populates="zone" ) netbrite: NetBriteDB = Relationship( # pyright: ignore[reportAny] back_populates="zones" ) class ZonePublic(ZoneDBBase): id: int default_message: MessagePublic # netbrite: NetBritePublic