"""
日志使用示例
演示如何在应用中使用日志模块
"""
from app.utils.logger import Logger, log_request_info, log_function_call, ErrorHandler


class LogExample:
    """日志使用示例类"""
    
    @log_request_info
    def api_example(self):
        """API示例 - 自动记录请求信息"""
        Logger.info("处理API请求")
        
        try:
            # 模拟一些业务逻辑
            result = self.business_logic()
            Logger.info("API处理成功", {'result_count': len(result)})
            return result
        except Exception as e:
            Logger.error("API处理失败", e, {'endpoint': 'api_example'})
            raise
    
    @log_function_call("业务逻辑处理")
    def business_logic(self):
        """业务逻辑示例"""
        Logger.info("开始执行业务逻辑")
        
        # 模拟一些操作
        data = {'user_id': 123, 'action': 'create_task'}
        Logger.info("业务逻辑执行中", data)
        
        # 模拟可能的错误
        if False:  # 这里可以改为True来测试错误处理
            raise ValueError("模拟的业务逻辑错误")
        
        Logger.info("业务逻辑执行完成")
        return [1, 2, 3, 4, 5]
    
    def error_handling_example(self):
        """错误处理示例"""
        try:
            # 模拟数据库操作
            self.database_operation()
        except Exception as e:
            ErrorHandler.handle_database_error(e, "查询用户信息")
        
        try:
            # 模拟API调用
            self.api_call()
        except Exception as e:
            ErrorHandler.handle_api_error(e, "/api/v1/users", {'user_id': 123})
        
        try:
            # 模拟一般异常
            raise RuntimeError("这是一个测试异常")
        except Exception as e:
            ErrorHandler.handle_exception(e, "错误处理示例")
    
    def database_operation(self):
        """模拟数据库操作"""
        raise ConnectionError("数据库连接失败")
    
    def api_call(self):
        """模拟API调用"""
        raise TimeoutError("API调用超时")
    
    def access_log_example(self):
        """访问日志示例"""
        Logger.access_log("用户登录", {
            'user_id': 123,
            'login_method': 'password',
            'ip_address': '192.168.1.100'
        })
        
        Logger.access_log("用户操作", {
            'user_id': 123,
            'action': 'create_task',
            'resource_id': 456
        })


# 使用示例
def demo_logging():
    """演示日志功能"""
    example = LogExample()
    
    print("=== 日志功能演示 ===")
    
    # 基本日志记录
    Logger.info("应用启动", {'version': '1.0.0'})
    Logger.warning("这是一个警告信息", {'warning_type': 'deprecated_api'})
    Logger.error("这是一个错误信息", None, {'error_code': 'E001'})
    
    # 全局错误日志
    Logger.global_error("全局错误测试", None, {'severity': 'high'})
    
    # 访问日志
    Logger.access_log("页面访问", {'page': '/dashboard'})
    
    # 函数调用日志
    example.business_logic()
    
    # 错误处理示例
    example.error_handling_example()
    
    print("=== 日志演示完成 ===")


if __name__ == "__main__":
    demo_logging()
