# app/runtime/subscribers/db_subscriber.py

from flask import current_app

from extensions import db
from Copilot.dataAcquisition.Core.BaseSubscriber import BaseSubscriber
from models.factory_structure_model import Parameter, ParameterValue
from Copilot.dataAcquisition.Core.CollectedData import CollectedData



class DBParmsValueHandler(BaseSubscriber):

    def __init__(self, app=None):

        super().__init__()

        if app is None:
            app =  current_app._get_current_object()
        self.app = app

        self.parameter_map = {}

        self.generate_parameters_map()

    def generate_parameters_map(self):

        with self.app.app_context():

            parameters:list[Parameter] = Parameter.query.all()

            self.parameter_map = {
                p.tag: p.id
                for p in parameters
            }

    def handle(self, event:CollectedData):

        with self.app.app_context():

            db.session.add(

                ParameterValue(

                    parameter_id=event.parameter.id,

                    value=event.value,

                    timestamp=event.timestamp
                )
            )

            db.session.commit()