from __future__ import annotations from datetime import date from enum import Enum from pydantic import BaseModel, Field, field_validator class LogStatus(str, Enum): taken = "taken" missed = "missed" snoozed = "snoozed" class PinLogin(BaseModel): pin: str = Field(..., min_length=3, max_length=12) class LogEntry(BaseModel): slot_id: str = Field(..., min_length=1, max_length=64) status: LogStatus = LogStatus.taken day: date | None = None logged_at: str | None = None source: str = "app" class SnoozeRequest(BaseModel): slot_id: str = Field(..., min_length=1, max_length=64) minutes: int = Field(...) @field_validator("minutes") @classmethod def allowed_snooze(cls, v: int) -> int: if v not in (15, 30): raise ValueError("minutes must be 15 or 30") return v class PushSubscribe(BaseModel): subscription: dict class AgentLogEntry(BaseModel): slot_id: str = Field(..., min_length=1, max_length=64) status: LogStatus = LogStatus.taken day: date | None = None logged_at: str | None = None source: str = "agent" class AgentNotifyRequest(BaseModel): title: str = Field(..., min_length=1, max_length=120) body: str = Field(..., min_length=1, max_length=512) slot_id: str | None = None tag: str | None = None