import time
from functools import wraps
from flask import request, current_app
import logging

def log_request():
    """Middleware para logging de requisições"""
    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            start_time = time.time()
            
            current_app.logger.info(
                f"Request: {request.method} {request.path} "
                f"from {request.remote_addr}"
            )
            
            response = f(*args, **kwargs)
            
            duration = time.time() - start_time
            current_app.logger.info(
                f"Response: {request.method} {request.path} "
                f"took {duration:.2f}s"
            )
            
            return response
        return decorated_function
    return decorator

def secure_headers():
    """Middleware para adicionar headers de segurança"""
    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            response = f(*args, **kwargs)
            
            response.headers['X-Content-Type-Options'] = 'nosniff'
            response.headers['X-Frame-Options'] = 'SAMEORIGIN'
            response.headers['X-XSS-Protection'] = '1; mode=block'
            response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubDomains'
            
            return response
        return decorated_function
    return decorator

def setup_logging(app):
    """Configura o logging da aplicação"""
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        handlers=[
            logging.FileHandler('app.log'),
            logging.StreamHandler()
        ]
    )
    
    app.logger.setLevel(logging.INFO) 