from flask import Flask, render_template, request, redirect, url_for, session, jsonify
import sqlite3
import psutil
import platform
import datetime
import os
from functools import wraps

app = Flask(__name__)
app.secret_key = 'ultra_secret_key'

DB_PATH = 'users.db'

def init_db():
    with sqlite3.connect(DB_PATH) as conn:
        cursor = conn.cursor()
        cursor.execute("""CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            username TEXT UNIQUE,
            password TEXT,
            role TEXT
        )""")
        cursor.execute("INSERT OR IGNORE INTO users (username, password, role) VALUES ('admin', 'admin', 'admin')")
        conn.commit()

def login_required(role='user'):
    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            if 'user' not in session:
                return redirect(url_for('login'))
            if role == 'admin' and session.get('role') != 'admin':
                return "403 Forbidden", 403
            return f(*args, **kwargs)
        return decorated_function
    return decorator

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        with sqlite3.connect(DB_PATH) as conn:
            cursor = conn.cursor()
            cursor.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
            user = cursor.fetchone()
            if user:
                session['user'] = user[1]
                session['role'] = user[3]
                return redirect(url_for('dashboard'))
        return render_template('login.html', error='Hibás bejelentkezés')
    return render_template('login.html')

@app.route('/logout')
def logout():
    session.clear()
    return redirect(url_for('login'))

@app.route('/')
@login_required()
def dashboard():
    return render_template('dashboard.html')

@app.route('/api/stats')
@login_required()
def stats():
    return jsonify({
        'cpu': psutil.cpu_percent(),
        'ram': psutil.virtual_memory().percent,
        'disk': psutil.disk_usage('/').percent,
        'uptime': str(datetime.timedelta(seconds=int(datetime.datetime.now().timestamp() - psutil.boot_time()))),
        'platform': platform.platform()
    })

if __name__ == '__main__':
    init_db()
    app.run(host='0.0.0.0', port=5000)
