from datetime import datetime
from uuid import UUID

from app.database import SessionLocal
from app.models.meter_value import MeterValue

from app.schemas.meter_value import Measurand, PhaseType

async def create_meter_value(transaction_id: UUID, meter_value_data):
    with SessionLocal() as db:
        timestamp = datetime.fromisoformat(meter_value_data['timestamp'])
        for sampled_value in meter_value_data['sampled_value']:
            db_meter_value = MeterValue()
            db_meter_value.transaction_id = transaction_id
            db_meter_value.timestamp = timestamp
            if "measurand" in sampled_value.keys():
                db_meter_value.measurand = Measurand(sampled_value['measurand'])
            else:
                db_meter_value.measurand = Measurand.ENERGY_ACTIVE_IMPORT_REGISTER
            if "phase" in sampled_value.keys():
                db_meter_value.phase_type = PhaseType(sampled_value['phase'])
            if "unit_of_measure" in sampled_value.keys():
                if "unit" in sampled_value['unit_of_measure']:
                    db_meter_value.unit = sampled_value['unit_of_measure']['unit']
                else:
                    db_meter_value.unit = "Wh"
            db_meter_value.value = sampled_value['value']
            db.add(db_meter_value)
        db.commit()