from enum import Enum

from flask import Blueprint, jsonify

from logic.Database import Database


class SensorParameters(Enum):
    NAME = 'name'
    TYPE = 'type'
    VALUE = 'value'

    @staticmethod
    def get_values():
        return [m.value for m in SensorParameters]


def construct_blueprint(settings):
    sensors = Blueprint('sensors', __name__)

    @sensors.route('/sensors', methods=['GET'])
    def get_all_sensors():
        database = Database(settings['database']['databasePath'])
        return jsonify(database.sensorAccess.get_all_sensors())

    @sensors.route('/sensor/<int:sensorID>', methods=['GET'])
    def get_sensor(sensorID):
        database = Database(settings['database']['databasePath'])
        return jsonify(database.sensorAccess.get_sensor(sensorID))

    @sensors.route('/sensor/<sensorID>/measurements', methods=['GET'])
    def get_all_measurements_for_sensor(sensorID):
        database = Database(settings['database']['databasePath'])
        sensor = database.sensorAccess.get_sensor(sensorID)
        if not sensor:
            return jsonify({'success': False, 'msg': f'No sensor with id "{sensorID}" existing'})

        return jsonify(database.measurementAccess.get_all_measurements_for_sensor(sensorID))

    @sensors.route('/sensor/<sensorID>/measurements/latest', methods=['GET'])
    def get_latest_measurements_for_sensor(sensorID):
        database = Database(settings['database']['databasePath'])
        sensor = database.sensorAccess.get_sensor(sensorID)
        if not sensor:
            return jsonify({'success': False, 'msg': f'No sensor with id "{sensorID}" existing'})

        return jsonify(database.measurementAccess.get_latest_measurements_for_sensor(sensorID))

    return sensors