""" Main Flask Routes Handles the primary web interface for the Markov economics simulation, including the main simulation page and basic navigation. """ from flask import Blueprint, render_template, request, jsonify from app.models import SimulationManager, SimulationParameters main_bp = Blueprint('main', __name__) # Global simulation manager instance simulation_manager = SimulationManager() @main_bp.route('/') def index(): """ Main simulation interface page. Returns: Rendered HTML template with simulation controls """ # Default parameters for display default_params = { 'r_rate': 0.05, # 5% capital return rate 'g_rate': 0.03, # 3% economic growth rate 'initial_capital': 1000.0, 'initial_consumption': 1000.0, 'num_agents': 100, 'iterations': 1000 } return render_template('simulation.html', default_params=default_params, title="Markov Economics - Capitalism Eats the World") @main_bp.route('/simulation') def simulation(): """ Alternative route to the main simulation page. Returns: Rendered HTML template with simulation controls """ return index() @main_bp.route('/about') def about(): """ Information page about the economic theory behind the simulation. Returns: Rendered HTML template with theoretical background """ return render_template('about.html', title="About - Markov Economics Theory") @main_bp.route('/results/') def results(simulation_id): """ Display results for a specific simulation. Args: simulation_id: Unique identifier for the simulation Returns: Rendered results template or 404 if simulation not found """ simulation = simulation_manager.get_simulation(simulation_id) if not simulation: return render_template('error.html', error_message=f"Simulation {simulation_id} not found", title="Simulation Not Found"), 404 # Get simulation summary data latest_snapshot = simulation.get_latest_snapshot() iterations, total_wealth, gini_coefficients = simulation.get_wealth_evolution() summary_data = { 'simulation_id': simulation_id, 'parameters': { 'r_rate': simulation.parameters.r_rate, 'g_rate': simulation.parameters.g_rate, 'num_agents': simulation.parameters.num_agents, 'iterations': simulation.parameters.iterations }, 'current_iteration': simulation.current_iteration, 'total_iterations': len(simulation.snapshots), 'latest_snapshot': latest_snapshot, 'has_data': len(simulation.snapshots) > 0 } return render_template('results.html', simulation_data=summary_data, title=f"Results - Simulation {simulation_id[:8]}") @main_bp.route('/health') def health_check(): """ Simple health check endpoint. Returns: JSON response indicating service status """ return jsonify({ 'status': 'healthy', 'service': 'markov-economics', 'active_simulations': len(simulation_manager.active_simulations), 'total_simulations': len(simulation_manager.simulations) }) @main_bp.errorhandler(404) def not_found_error(error): """ Handle 404 errors with custom template. Args: error: The error object Returns: Rendered error template """ return render_template('error.html', error_message="Page not found", title="Page Not Found"), 404 @main_bp.errorhandler(500) def internal_error(error): """ Handle 500 errors with custom template. Args: error: The error object Returns: Rendered error template """ return render_template('error.html', error_message="Internal server error occurred", title="Server Error"), 500