#!/usr/bin/env python3
import json
import os
from datetime import datetime
from typing import List, Dict

class MissionControl:
    def __init__(self, data_path=os.path.expanduser('~/mission_control_tasks.json')):
        self.data_path = data_path
        self.tasks = self.load_tasks()
    
    def load_tasks(self) -> List[Dict]:
        """Load tasks from JSON file"""
        if not os.path.exists(self.data_path):
            return []
        
        with open(self.data_path, 'r') as f:
            return json.load(f)
    
    def save_tasks(self):
        """Save tasks to JSON file"""
        with open(self.data_path, 'w') as f:
            json.dump(self.tasks, f, indent=2)
    
    def create_task(self, title: str, description: str = "") -> Dict:
        """Create a new task"""
        task = {
            "id": len(self.tasks) + 1,
            "title": title,
            "description": description,
            "status": "Backlog",
            "created_at": datetime.now().isoformat(),
            "updated_at": datetime.now().isoformat()
        }
        self.tasks.append(task)
        self.save_tasks()
        return task
    
    def update_task_status(self, task_id: int, new_status: str):
        """Update task status"""
        valid_statuses = ["Backlog", "In Progress", "Review", "Done"]
        if new_status not in valid_statuses:
            raise ValueError(f"Invalid status. Must be one of {valid_statuses}")
        
        for task in self.tasks:
            if task['id'] == task_id:
                task['status'] = new_status
                task['updated_at'] = datetime.now().isoformat()
                break
        
        self.save_tasks()
    
    def list_tasks(self, status: str = None) -> List[Dict]:
        """List tasks, optionally filtered by status"""
        if status:
            return [task for task in self.tasks if task['status'] == status]
        return self.tasks
    
    def cli_interface(self):
        """Simple CLI for task management"""
        while True:
            print("\nMission Control")
            print("1. Create Task")
            print("2. Update Task Status")
            print("3. List Tasks")
            print("4. Exit")
            
            choice = input("Choose an option: ")
            
            if choice == '1':
                title = input("Task Title: ")
                description = input("Task Description (optional): ")
                self.create_task(title, description)
            
            elif choice == '2':
                task_id = int(input("Task ID: "))
                new_status = input("New Status (Backlog/In Progress/Review/Done): ")
                self.update_task_status(task_id, new_status)
            
            elif choice == '3':
                status_filter = input("Filter by Status (optional): ")
                tasks = self.list_tasks(status_filter) if status_filter else self.list_tasks()
                for task in tasks:
                    print(f"ID: {task['id']} | Title: {task['title']} | Status: {task['status']}")
            
            elif choice == '4':
                break

def main():
    mission_control = MissionControl()
    mission_control.cli_interface()

if __name__ == "__main__":
    main()