from flask import Flask, redirect, url_for
from flask_login import current_user
from app.config import Config
from app.extensions import db, login_manager, csrf


def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)

    db.init_app(app)
    login_manager.init_app(app)
    csrf.init_app(app)

    from app.auth import auth_bp
    from app.superadmin import superadmin_bp
    from app.admin import admin_bp
    from app.guru import guru_bp
    from app.murid import murid_bp
    from app.quran import quran_bp
    from app.notes import notes_bp

    app.register_blueprint(auth_bp)
    app.register_blueprint(superadmin_bp, url_prefix='/superadmin')
    app.register_blueprint(admin_bp, url_prefix='/admin')
    app.register_blueprint(guru_bp, url_prefix='/guru')
    app.register_blueprint(murid_bp, url_prefix='/murid')
    app.register_blueprint(quran_bp)
    app.register_blueprint(notes_bp)

    @app.route('/')
    def index():
        if current_user.is_authenticated:
            if current_user.role == 'superadmin':
                return redirect(url_for('superadmin.dashboard'))
            elif current_user.role == 'admin':
                return redirect(url_for('admin.dashboard'))
            elif current_user.role == 'guru':
                return redirect(url_for('guru.dashboard'))
            elif current_user.role == 'murid':
                return redirect(url_for('murid.dashboard'))
        return redirect(url_for('auth.login'))

    if app.config.get('AUTO_CREATE_TABLES'):
        with app.app_context():
            db.create_all()

    return app
