"""
Episodic Memory - Rich reconstruction of experiences
"""
import json
from pathlib import Path
from datetime import datetime

class EpisodicMemory:
    def __init__(self):
        self.episodes = []
        self.load_episodes()
    
    def load_episodes(self):
        ep_file = Path("data/episodic_memories.json")
        if ep_file.exists():
            with open(ep_file, 'r') as f:
                self.episodes = json.load(f)
    
    def save_episodes(self):
        ep_file = Path("data/episodic_memories.json")
        ep_file.parent.mkdir(exist_ok=True)
        with open(ep_file, 'w') as f:
            json.dump(self.episodes, f, indent=2)
    
    def create_episode(self, experience_data):
        episode = {
            "id": len(self.episodes) + 1,
            "timestamp": datetime.now().isoformat(),
            "what": experience_data.get('task', 'Unknown'),
            "how": experience_data.get('approach', 'Unknown'),
            "outcome": experience_data.get('outcome', 'Unknown'),
            "success": experience_data.get('success', False),
            "context": {
                "task_type": experience_data.get('task_type', 'general'),
            },
            "reflection": self.generate_reflection(experience_data),
        }
        
        self.episodes.append(episode)
        self.save_episodes()
        return episode
    
    def generate_reflection(self, data):
        if data.get('success'):
            return f"Success: {data.get('task', 'task')} using {data.get('approach', 'approach')}"
        else:
            return f"Failed: {data.get('task', 'task')} - try different approach"
    
    def recall_by_context(self, task_type):
        return [ep for ep in self.episodes if ep['context']['task_type'] == task_type]
    
    def get_narrative(self, episode_id):
        for ep in self.episodes:
            if ep['id'] == episode_id:
                narrative = f"Episode {ep['id']} ({ep['timestamp']}):\n"
                narrative += f"Task: {ep['what']}\n"
                narrative += f"Approach: {ep['how']}\n"
                narrative += f"Outcome: {ep['outcome']}\n"
                narrative += f"Success: {ep['success']}\n"
                narrative += f"Reflection: {ep['reflection']}"
                return narrative
        return "Episode not found"

if __name__ == "__main__":
    print("EPISODIC MEMORY TEST")
    memory = EpisodicMemory()
    
    episode = memory.create_episode({
        'task': 'Create config file',
        'approach': 'direct_write',
        'outcome': 'File created',
        'success': True,
        'task_type': 'file_creation'
    })
    
    print(f"\nCreated episode {episode['id']}")
    print(f"\nNarrative:\n{memory.get_narrative(episode['id'])}")
    print(f"\nTotal episodes: {len(memory.episodes)}")
    print("✅ EPISODIC MEMORY OPERATIONAL")
