import uuid
from datetime import datetime
from typing import Optional
from sqlalchemy import String, DateTime, ForeignKey, Numeric, BigInteger
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base, GUID


class DeviceReading(Base):
    __tablename__ = "device_readings"

    id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
    device_id: Mapped[uuid.UUID] = mapped_column(GUID, ForeignKey("devices.id", ondelete="CASCADE"), nullable=False)
    
    reading_type: Mapped[str] = mapped_column(String(50), nullable=False)  # temperature, humidity, motion, power, etc.
    value: Mapped[float] = mapped_column(Numeric(10, 2), nullable=False)
    unit: Mapped[str] = mapped_column(String(20), nullable=True)
    
    recorded_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, index=True)

    # Relationships
    device = relationship("Device", back_populates="readings")
