from flask import request, jsonify
from db_config import get_db_connection

def get_all_requests():
    try:
        conn = get_db_connection()
        cursor = conn.cursor(dictionary=True)
        cursor.execute("SELECT * FROM requests")
        requests = cursor.fetchall()
        cursor.close()
        conn.close()
        return jsonify(requests)
    except Exception as e:
        return jsonify({"error": str(e)}), 500


def submit_request():
    try:
        data = request.json
        request_type = data.get("request_type")
        name = data.get("name")
        user_id = data.get("user_id")
        muscles = data.get("muscles", "")
        equipment = data.get("equipment", "None")

        if not request_type or not name or not user_id:
            return jsonify({"error": "Missing fields"}), 400

        conn = get_db_connection()
        cursor = conn.cursor()

        if request_type == "exercise":
            cursor.execute(
                "INSERT INTO requests (request_type, name, muscles, equipment, user_id) VALUES (%s, %s, %s, %s, %s)",
                (request_type, name, muscles, equipment, user_id)
            )
        elif request_type == "equipment":
            cursor.execute(
                "INSERT INTO requests (request_type, name, user_id) VALUES (%s, %s, %s)",
                (request_type, name, user_id)
            )
        else:
            return jsonify({"error": "Invalid request_type"}), 400

        conn.commit()
        cursor.close()
        conn.close()
        return jsonify({"status": "Request submitted"}), 201

    except Exception as e:
        return jsonify({"error": str(e)}), 500


def accept_request():
    try:
        data = request.json
        request_id = data.get("request_id")

        if not request_id:
            return jsonify({"error": "Missing request_id"}), 400

        conn = get_db_connection()
        cursor = conn.cursor(dictionary=True)

        cursor.execute("SELECT * FROM requests WHERE id = %s", (request_id,))
        req = cursor.fetchone()

        if not req:
            cursor.close()
            conn.close()
            return jsonify({"error": "Request not found"}), 404

        user_id = req["user_id"]
        name = req["name"]
        cursor.execute("DELETE FROM requests WHERE id = %s", (request_id,))

        notif_title = "Request Accepted"
        notif_msg = f"Your request '{name}' has been accepted !"
        cursor.execute(
            "INSERT INTO notifications (user_id, title, message, created_at, is_read) VALUES (%s, %s, %s, NOW(), false)",
            (user_id, notif_title, notif_msg)
        )

        conn.commit()
        cursor.close()
        conn.close()

        return jsonify({"status": "Request accepted and user notified"}), 200

    except Exception as e:
        return jsonify({"error": str(e)}), 500


def reject_request():
    try:
        data = request.json
        request_id = data.get("request_id")

        if not request_id:
            return jsonify({"error": "Missing request_id"}), 400

        conn = get_db_connection()
        cursor = conn.cursor()
        cursor.execute("DELETE FROM requests WHERE id = %s", (request_id,))
        conn.commit()
        cursor.close()
        conn.close()

        return jsonify({"status": "Request rejected (deleted)"}), 200

    except Exception as e:
        return jsonify({"error": str(e)}), 500
