"""Create recovery_planner
Generated by Phi-Octopus Eden
2025-11-08 08:23:32.785404
"""

```python
from typing import Dict, Any


class RecoveryPlanner:
    """
    A class for creating a limited error recovery planner.
    
    Attributes:
        max_retries (int): The maximum number of retries allowed.
        errors_dict (Dict[str, int]): A dictionary to store error counts by type.
        
    Methods:
        plan_recovery: Plans the recovery steps based on error types and counts.
        log_error: Logs an error occurrence with its type.
        execute_plan: Executes the planned recovery actions.
    """
    
    def __init__(self, max_retries: int = 3):
        self.max_retries = max_retries
        self.errors_dict = {}
        
    def plan_recovery(self) -> Dict[str, Any]:
        """Plans recovery steps based on error occurrences and types."""
        recovery_plan = {}
        for error_type, count in self.errors_dict.items():
            if count > 0:
                recovery_plan[error_type] = {"count": count, "retries_left": self.max_retries}
        return recovery_plan
    
    def log_error(self, error_type: str) -> None:
        """Logs an error occurrence with its type."""
        if error_type in self.errors_dict:
            self.errors_dict[error_type]["count"] += 1
        else:
            self.errors_dict[error_type] = {"count": 1}
    
    def execute_plan(self, plan: Dict[str, Any]) -> None:
        """Executes the planned recovery actions."""
        for error_type, details in plan.items():
            print(f"Executing recovery for {error_type} with {details['retries_left']} retries left.")
            # Simulate retry logic
            while details["retries_left"] > 0 and self.errors_dict[error_type]["count"] > 0:
                print(f"Retrying {error_type}. Retries left: {details['retries_left']}")
                self.errors_dict[error_type]["retries_left"] -= 1
                # Decrease error count after successful retry or no retries left
                if details["retries_left"] == 0 or self.errors_dict[error_type]["count"] == 0:
                    break


# Example usage
if __name__ == "__main__":
    planner = RecoveryPlanner(max_retries=5)
    
    # Simulate error logging and recovery planning
    planner.log_error("NetworkError")
    planner.log_error("FileReadError")
    planner.log_error("DataFormatError")
    
    plan = planner.plan_recovery()
    print(f"Recovery Plan: {plan}")
    
    # Execute planned recovery actions
    planner.execute_plan(plan)
```