""" Product Finder Blueprint Handles the product quiz and recommendations """ from flask import Blueprint, render_template, send_from_directory, session, jsonify, redirect, url_for from blueprints.auth import login_required, get_current_user, can_user import os products_bp = Blueprint('products', __name__, url_prefix='/quiz') # Get base directory basedir = os.path.dirname(os.path.dirname(__file__)) @products_bp.route('/') @login_required def product_finder(): """Serve the product finder quiz page""" return render_template('product_finder.html') @products_bp.route('/index') @login_required def quiz_index(): """Alternative route for product finder""" return render_template('product_finder.html') @products_bp.route('/advanced-search') @login_required def advanced_search(): """Serve the advanced search page""" return render_template('advanced_search.html') @products_bp.route('/manage') @login_required def product_manager(): """Serve the product management page""" # Check if user has permission to manage products if not can_user('manage_products'): return redirect(url_for('products.product_finder')) return render_template('product_manager.html') @products_bp.route('/api/user-session') @login_required def get_user_session(): """Return current user's session data including accessible locations""" user = get_current_user() permissions = user.get('permissions', {}) if user else {} return jsonify({ 'username': session.get('username'), 'userId': session.get('user_id'), 'currentLocation': session.get('currentLocation'), 'accessibleLocations': session.get('accessibleLocations', []), 'role': session.get('role', 'user'), 'permissions': permissions }) @products_bp.route('/css/') def serve_css(filename): """Serve CSS files""" return send_from_directory(os.path.join(basedir, 'static', 'css'), filename) @products_bp.route('/js/') def serve_js(filename): """Serve JavaScript files""" return send_from_directory(os.path.join(basedir, 'static', 'js'), filename) @products_bp.route('/images/') def serve_images(filename): """Serve image files""" return send_from_directory(os.path.join(basedir, 'static', 'images'), filename) @products_bp.route('/data/') def serve_data(filename): """Serve data files (JSON)""" return send_from_directory(os.path.join(basedir, 'data'), filename) @products_bp.route('/product/') @login_required def product_detail(product_code): """ Serve product detail page with URL-based navigation This allows direct linking to products via /quiz/product/404 """ return render_template('product_finder.html', initial_product=product_code)