from datetime import datetime, UTC

from app.database import SessionLocal
from app.models.chargepoint import ChargePoint
from app.models.connector import Connector

from app.schemas.connector import ConnectorStatus

async def update_last_seen(chargepoint_identity: str):
    with SessionLocal() as db:
        db_chargepoint = db.query(ChargePoint).filter(ChargePoint.identity == chargepoint_identity).first()
        db_chargepoint.last_seen = datetime.now(UTC)
        db.commit()

async def update_attributes(chargepoint_identity: str, charging_station):
    with SessionLocal() as db:
        db_chargepoint = db.query(ChargePoint).filter(ChargePoint.identity == chargepoint_identity).first()
        for key in charging_station.keys():
            if key in db_chargepoint.__dict__:
                setattr(db_chargepoint, key, charging_station[key])
        db.commit()

async def create_or_update_connector(
    chargepoint_identity: str,
    evse_id: int,
    connector_id: int,
    connector_status: str
):
    with SessionLocal() as db:
        db_chargepoint = db.query(ChargePoint).filter(ChargePoint.identity == chargepoint_identity).first()
        db_connector = db.query(Connector).filter(
            Connector.chargepoint_id == db_chargepoint.id,
            Connector.evse == evse_id,
            Connector.index == connector_id
        ).first()
        if db_connector == None:
            db_connector = Connector(
                chargepoint_id = db_chargepoint.id,
                evse = evse_id,
                index = connector_id,
                status = ConnectorStatus(connector_status)
            )
            db.add(db_connector)
        else:
            db_connector.status = ConnectorStatus(connector_status)
        db.commit()