from flask import Flask, session, redirect, request, url_for

def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'init1234!'

    # Register blueprints
    from .routes.dashboard import bp as dashboard_bp
    from .routes.mods import bp as mods_bp
    from .routes.mod_requests import bp as mod_requests_bp
    from .routes.players import bp as players_bp
    from .routes.server import bp as server_bp
    from .routes.map import bp as map_bp
    from .routes.mod_management import bp as mod_management_bp
    from .routes.auth import bp as auth_bp

    app.register_blueprint(dashboard_bp)
    app.register_blueprint(mods_bp)
    app.register_blueprint(mod_requests_bp)
    app.register_blueprint(players_bp)
    app.register_blueprint(server_bp)
    app.register_blueprint(map_bp)
    app.register_blueprint(mod_management_bp)
    app.register_blueprint(auth_bp)

    # 기본 경로 설정
    @app.route('/')
    def root():
        """루트 경로 처리"""
        if 'user' in session:
            # 로그인된 상태에서는 대시보드로 리디렉션
            return redirect(url_for('dashboard.dashboard'))
        else:
            # 비로그인 상태에서는 로그인 페이지로 이동
            return redirect(url_for('auth.login'))

    # 전역 로그인 확인
    @app.before_request
    def require_login():
        # 로그인 또는 인증 관련 엔드포인트는 제외
        exempt_endpoints = ['auth.login', 'auth.callback', 'auth.discord_login', 'static']
        if request.endpoint not in exempt_endpoints:
            if 'user' not in session:
                return redirect(url_for('auth.login'))

    return app
