from dataclasses import dataclass
import uuid
from sqlalchemy import ForeignKey, Integer, Numeric, Uuid, Boolean, Column, String, Enum

from app.database import Base
from app.schemas.chargepoint_variable import AttributeType, MutabilityType, DataType

@dataclass
class ChargepointVariable(Base):
    __tablename__ = "chargepoint_variables"

    id = Column(Uuid, primary_key=True, default=uuid.uuid4)
    name = Column(String)
    type = Column(Enum(AttributeType), default=AttributeType.ACTUAL)
    value = Column(String, nullable=True)
    mutability = Column(Enum(MutabilityType), default=MutabilityType.READ_WRITE)
    persistent = Column(Boolean, default=False)
    constant = Column(Boolean, default=False)
    unit = Column(String, nullable=True)
    data_type = Column(Enum(DataType), nullable=True)
    min_limit = Column(Numeric, nullable=True)
    max_limit = Column(Numeric, nullable=True)
    values_list = Column(String, nullable=True)
    component_name = Column(String)
    component_instance = Column(String, nullable=True)
    evse = Column(Integer, nullable=True)
    connector_id = Column(Integer, nullable=True)

    chargepoint_id = Column(Uuid, ForeignKey("chargepoints.id"), index=True)