from flask import Blueprint, render_template, request, redirect, url_for, flash
from .models import db, User, Key
from flask_login import login_user, logout_user, login_required
from werkzeug.security import generate_password_hash, check_password_hash
from .forms import LoginForm, RegisterForm

main = Blueprint('main', __name__)

@main.route('/')
def home():
    return redirect(url_for('main.login'))

@main.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first()
        if user and check_password_hash(user.password_hash, form.password.data):
            login_user(user, remember=form.remember.data)
            return redirect('/dashboard')
        flash("Špatné přihlašovací údaje")
    return render_template('login.html', form=form)

@main.route('/register/<key_value>', methods=['GET', 'POST'])
def register(key_value):
    form = RegisterForm()
    form.key.data = key_value  # předvyplní klíč
    if form.validate_on_submit():
        existing_key = Key.query.filter_by(key=form.key.data).first()
        if not existing_key:
            flash("Neplatný registrační klíč")
            return render_template('register.html', form=form)

        hashed = generate_password_hash(form.password.data)
        user = User(email=form.email.data, password_hash=hashed, access_key=existing_key.value)
        db.session.add(user)
        db.session.delete(existing_key)
        db.session.commit()
        flash("Úspěšná registrace. Nyní se přihlaste.")
        return redirect(url_for('main.login'))
    return render_template('register.html', form=form)

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

@main.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('main.login'))
