from dataclasses import field
from datetime import date

from nicegui import binding
from nicegui import ui


@binding.bindable_dataclass
class ReportFilters:
    start_on: date = field(default_factory=date.today)
    page_size: int = 25


filters = ReportFilters()

ui.date().bind_value(
    filters,
    "start_on",
    forward=date.fromisoformat,  # control str -> model date
    backward=date.isoformat,  # model date -> control str
)

ui.label().bind_text_from(
    filters,
    "start_on",
    backward=lambda value: f"Starting {value:%d %B %Y}",
)

if __name__ in {"__main__", "__mp_main__"}:
    ui.run(port=8888, reload=True)
