from flask import Flask, request, jsonify
import logging

from opentelemetry import trace
from opentelemetry.trace import Status, StatusCode

from aiva.models.model_loader import load_model

app = Flask(__name__)
logger = logging.getLogger(__name__)
tracer = trace.get_tracer(__name__)

@app.route('/process_request', methods=['POST'])
def process_request():
    with tracer.start_as_current_span("process_request") as span:
        try:
            request_data = request.get_json()
            span.set_attribute("request.body", str(request_data))
            logger.info(f"Received request: {request_data}")

            # Simulate processing the request
            model_name = request_data.get('model_name', 'default_model')
            span.set_attribute("request.model_name", model_name)

            model_result = load_model(model_name)

            response_data = {"result": f"Request processed successfully. Model status: {model_result}"}
            span.set_status(Status(StatusCode.OK))
            return jsonify(response_data), 200
        except Exception as e:
            span.set_status(Status(StatusCode.ERROR, str(e)))
            logger.exception(f"Error processing request: {e}")
            return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    app.run(debug=True)
