from flask import render_template, redirect, url_for, flash, request
from flask_login import login_user, logout_user, current_user
from app.extensions import db, limiter
from app.forms import LoginForm
from app.models import User, ActivityLog
from app.auth import bp

@bp.route("/login", methods=["GET", "POST"])
@limiter.limit("5 per minute")
def login():
    if current_user.is_authenticated:
        return redirect(url_for("admin.dashboard"))
    form = LoginForm()
    if form.validate_on_submit():
        identity = form.identity.data.strip().lower()
        user = User.query.filter(db.or_(db.func.lower(User.username) == identity, db.func.lower(User.email) == identity)).first()
        if user and user.active and user.check_password(form.password.data):
            login_user(user, remember=False, fresh=True)
            db.session.add(ActivityLog(user_id=user.id, action="login", entity="auth", ip_address=request.remote_addr))
            db.session.commit()
            return redirect(request.args.get("next") if request.args.get("next", "").startswith("/admin") else url_for("admin.dashboard"))
        flash("Login gagal. Periksa kembali kredensial Anda.", "danger")
    return render_template("auth/login.html", form=form)

@bp.route("/logout", methods=["POST"])
def logout():
    if current_user.is_authenticated:
        db.session.add(ActivityLog(user_id=current_user.id, action="logout", entity="auth", ip_address=request.remote_addr))
        db.session.commit()
    logout_user()
    flash("Anda telah keluar.", "info")
    return redirect(url_for("public.home"))
