from datetime import datetime
from decimal import Decimal
from typing import Optional
from uuid import UUID
from pydantic import BaseModel

from app.schemas.connector import Connector

from ocpp.v201.enums import ResetEnumType, ResetStatusEnumType

class ChargePointBase(BaseModel):
    identity: str
    is_active: bool
    price: Decimal

class ChargePointUpdate(BaseModel):
    identity: Optional[str] = None
    is_active: Optional[bool] = None
    price: Optional[Decimal]= None

class ChargePointCreate(ChargePointBase):
    pass

class ChargePoint(ChargePointBase):
    id: UUID
    last_seen: datetime | None
    vendor_name: str | None
    model: str | None
    serial_number: str | None
    firmware_version: str | None
    connectors: list[Connector] = []

    class Config:
        from_attributes = True

class ChargePointPassword(BaseModel):
    password: str
    
class ChargePointConnectionInfo(BaseModel):
    connected: bool

class ChargePointResetRequest(BaseModel):
    type: ResetEnumType
    evse_id: Optional[int] = None

class ChargePointResetResponse(BaseModel):
    status: ResetStatusEnumType