from flask import Flask, request, jsonify, render_template
import mysql.connector

app = Flask(__name__, template_folder='templates')

# Database connection configuration
db_config = {
    'host': 'localhost',
    'user': 'root',
    'password': '',
    'database': 'arb'
}

# Function to establish database connection
def get_db_connection():
    try:
        conn = mysql.connector.connect(**db_config)
        return conn
    except mysql.connector.Error as err:
        print(f"Error connecting to the database: {err}")
        return None

@app.route('/')
def home():
    return render_template('login.html')

def get_user_role():
    # Placeholder for actual role retrieval logic
    return 'admin'  # Example role for testing

def role_required(role):

    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            # Here you would check the user's role
            user_role = get_user_role()  # Placeholder for actual role retrieval
            if user_role != role:
                return jsonify({"message": "Access denied"}), 403
            return f(*args, **kwargs)
        return decorated_function
    return decorator

@app.route('/biserici', methods=['POST'])
@role_required('admin')
def add_biserica():

    data = request.json

    conn = get_db_connection()
    if conn:
        cursor = conn.cursor()
        query = "INSERT INTO biserici (ID_PAROHIE, HRAM, ANUL_INFIINTARII, ID_TIP_BISERICA, STARE, OBSERVATII) VALUES (%s, %s, %s, %s, %s, %s)"
        cursor.execute(query, (data['ID_PAROHIE'], data['HRAM'], data['ANUL_INFIINTARII'], data['ID_TIP_BISERICA'], data['STARE'], data['OBSERVATII']))
        conn.commit()
        cursor.close()
        conn.close()
        return jsonify({"message": "Biserica added successfully"}), 201
    return jsonify({"message": "Database connection error"}), 500


    
    # Here you would typically check the username and password against the database
    if username == 'admin' and password == 'password':  # Example check
        return jsonify({"message": "Login successful!"}), 200
    return jsonify({"message": "Invalid credentials!"}), 401

# Route to retrieve all biserici
@app.route('/biserici', methods=['GET'])
@role_required('user')
def get_biserici():
    conn = get_db_connection()

    if conn:
        cursor = conn.cursor(dictionary=True)
        query = "SELECT * FROM biserici"
        cursor.execute(query)
        biserici = cursor.fetchall()
        cursor.close()
        conn.close()
        return jsonify(biserici), 200
    return jsonify({"message": "Database connection error"}), 500


# Route to update a biserica
@app.route('/biserici/<int:id>', methods=['PUT'])
@role_required('admin')
def update_biserica(id):
    data = request.json

    conn = get_db_connection()
    if conn:
        cursor = conn.cursor()
        query = "UPDATE biserici SET ID_PAROHIE = %s, HRAM = %s, ANUL_INFIINTARII = %s, ID_TIP_BISERICA = %s, STARE = %s, OBSERVATII = %s WHERE ID_BISERICA = %s"
        cursor.execute(query, (data['ID_PAROHIE'], data['HRAM'], data['ANUL_INFIINTARII'], data['ID_TIP_BISERICA'], data['STARE'], data['OBSERVATII'], id))
        conn.commit()
        cursor.close()
        conn.close()
        return jsonify({"message": "Biserica updated successfully"}), 200
    return jsonify({"message": "Database connection error"}), 500


# Route to delete a biserica
@app.route('/biserici/<int:id>', methods=['DELETE'])
@role_required('admin')
def delete_biserica(id):
    conn = get_db_connection()

    if conn:
        cursor = conn.cursor()
        query = "DELETE FROM biserici WHERE ID_BISERICA = %s"
        cursor.execute(query, (id,))
        conn.commit()
        cursor.close()
        conn.close()
        return jsonify({"message": "Biserica deleted successfully"}), 200
    return jsonify({"message": "Database connection error"}), 500


# Route to retrieve all records
@app.route('/records', methods=['GET'])
def get_records():
    conn = get_db_connection()
    if conn:
        cursor = conn.cursor(dictionary=True)
        query = "SELECT * FROM your_table"
        cursor.execute(query)
        records = cursor.fetchall()
        cursor.close()
        conn.close()
        return jsonify(records), 200
    return jsonify({"message": "Database connection error"}), 500

# Route to display the form for adding a record
@app.route('/add-record', methods=['GET'])
def add_record_form():
    return '''
        <form action="/add" method="POST">
            <label for="column1">Column 1:</label>
            <input type="text" id="column1" name="column1" required>
            <label for="column2">Column 2:</label>
            <input type="text" id="column2" name="column2" required>
            <button type="submit">Add Record</button>
        </form>
    '''

if __name__ == '__main__':
    app.run(debug=True)
