# Rate Limiting Configuration for Flask Backend

# Add this to requirements.txt

# flask-limiter

# redis  # Optional: for distributed rate limiting

"""
Rate limiting implementation - add to app.py
"""

# At the top of app.py, add

from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

# After creating app, add

limiter = Limiter(
    app=app,
    key_func=get_remote_address,
    default_limits=["200 per day", "50 per hour"],
    storage_uri="memory://"  # Use redis:// for production with multiple workers
)

# Apply rate limiting to specific endpoints

@app.route('/api/profiles', methods=['GET','POST'])
@limiter.limit("100 per hour")
def profiles():
    # ... existing code ...
    pass

@app.route('/api/songs', methods=['GET','POST'])
@limiter.limit("100 per hour")
def songs():
    # ... existing code ...
    pass

@app.route('/api/search_external')
@limiter.limit("30 per hour")  # More restrictive for external API calls
def search_external():
    # ... existing code ...
    pass

@app.route('/api/upload_lyric', methods=['POST'])
@limiter.limit("10 per hour")  # File uploads should be rate limited
def upload_lyric():
    # ... existing code ...
    pass
