from dataclasses import dataclass
from models.factory_structure_model import Parameter, Machine
from datetime import datetime


@dataclass
class ParameterRef:
    id: str
    name: str
    machine_id: int
    display_name: str
    tag: str
    unit: str | None
    min_value: float | None
    max_value: float | None
    description:str | None

    def to_dict(self) -> dict:
        return {
        "id": self.id,
        "name": self.name,
        "machine_id": self.machine_id,
        "display_name": self.display_name,
        "tag": self.tag,
        "unit": self.unit,
        "min_value": self.min_value,
        "max_value": self.max_value,
        "description": self.description,
    }

    @classmethod
    def from_dict(cls, data: dict) -> "ParameterRef":
        return cls(
        id=data["id"],
        name=data["name"],
        machine_id=data["machine_id"],
        display_name=data["display_name"],
        tag=data["tag"],
        unit=data.get("unit"),
        min_value=data.get("min_value"),
        max_value=data.get("max_value"),
        description=data.get("description"),
    )



@dataclass
class MachineRef:
    id: int
    name: str
    display_name: str
    machine_type: str
    location: str | None
    status: str

    def to_dict(self) -> dict:
        return {
        "id": self.id,
        "name": self.name,
        "display_name": self.display_name,
        "machine_type": self.machine_type,
        "location": self.location,
        "status": self.status,
    }

    @classmethod
    def from_dict(cls, data: dict) -> "MachineRef":
        return MachineRef(
        id=data["id"],
        name=data["name"],
        display_name=data["display_name"],
        machine_type=data["machine_type"],
        location=data.get("location"),
        status=data["status"]
    )


@dataclass
class CollectedData:
    tag: str
    value: float
    timestamp: datetime
    parameter:ParameterRef = None
    machine:MachineRef = None


