"""
Tools Registry - реестр всех доступных MCP инструментов
"""

from typing import Dict, List


class ToolsRegistry:
    """Реестр всех MCP инструментов с их схемами"""
    
    @classmethod
    def get_all_tools(cls) -> List[Dict]:
        """Получить все инструменты"""
        return [
            # CORE TOOLS
            { 
                "name": "mcp_nmp_status", 
                "description": "NMP system status",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "random_string": {"type": "string", "description": "Dummy parameter for no-parameter tools"}
                    },
                    "required": ["random_string"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_memory_save", 
                "description": "Save information to NMP memory",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "content": {"type": "string", "description": "Content to save"},
                        "collection": {"type": "string", "description": "Collection name"},
                        "tags": {"type": "array", "items": {"type": "string"}, "description": "Tags"}
                    },
                    "required": ["content", "collection"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_memory_search", 
                "description": "Search in NMP memory",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "query": {"type": "string", "description": "Search query"},
                        "collection": {"type": "string", "description": "Collection name"},
                        "limit": {"type": "number", "description": "Max results"}
                    },
                    "required": ["query", "collection"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_memory_list", 
                "description": "List NMP collections",
                "inputSchema": {
                    "type": "object",
                    "properties": {},
                    "required": [],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_memory_create", 
                "description": "Create NMP collection",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "name": {"type": "string", "description": "Collection name"}
                    },
                    "required": ["name"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_memory_delete", 
                "description": "Delete NMP collection",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "name": {"type": "string", "description": "Collection name"}
                    },
                    "required": ["name"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_memory_stats", 
                "description": "NMP system statistics",
                "inputSchema": {
                    "type": "object",
                    "properties": {},
                    "required": [],
                    "additionalProperties": False
                }
            },
            
            # CODE TOOLS
            { 
                "name": "mcp_nmp_code_error_save", 
                "description": "Save code error + solution",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "error": {"type": "string", "description": "Error description"},
                        "solution": {"type": "string", "description": "Solution description"},
                        "context": {"type": "string", "description": "Error context"},
                        "tags": {"type": "array", "items": {"type": "string"}, "description": "Tags"}
                    },
                    "required": ["error", "solution"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_code_pattern_save", 
                "description": "Save code pattern",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "pattern": {"type": "string", "description": "Code pattern"},
                        "description": {"type": "string", "description": "Pattern description"},
                        "language": {"type": "string", "description": "Programming language"}
                    },
                    "required": ["pattern"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_refactor_track", 
                "description": "Track refactoring",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "before": {"type": "string", "description": "Code before refactoring"},
                        "after": {"type": "string", "description": "Code after refactoring"},
                        "reason": {"type": "string", "description": "Refactoring reason"}
                    },
                    "required": ["before", "after"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_solution_pattern", 
                "description": "Solution patterns",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "problem": {"type": "string", "description": "Problem description"},
                        "solution": {"type": "string", "description": "Solution pattern"}
                    },
                    "required": ["problem", "solution"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_debug_journey", 
                "description": "Debug journey history",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "steps": {"type": "string", "description": "Debug steps"},
                        "outcome": {"type": "string", "description": "Debug outcome"}
                    },
                    "required": ["steps"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_code_snippet_save", 
                "description": "Save useful code snippet",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "code": {"type": "string", "description": "Code snippet"},
                        "description": {"type": "string", "description": "What this code does"},
                        "language": {"type": "string", "description": "Programming language"}
                    },
                    "required": ["code"],
                    "additionalProperties": False
                }
            },
            
            # ARCHITECTURE TOOLS
            { 
                "name": "mcp_nmp_architecture_decision", 
                "description": "Architecture decisions",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "decision": {"type": "string", "description": "Architecture decision"},
                        "rationale": {"type": "string", "description": "Decision rationale"},
                        "alternatives": {"type": "string", "description": "Alternatives considered"}
                    },
                    "required": ["decision"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_dependency_map", 
                "description": "Dependency mapping",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "component": {"type": "string", "description": "Component name"},
                        "dependencies": {"type": "string", "description": "Dependencies list"}
                    },
                    "required": ["component"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_config_snapshot", 
                "description": "Configuration snapshot",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "config": {"type": "string", "description": "Configuration data"},
                        "environment": {"type": "string", "description": "Environment"}
                    },
                    "required": ["config"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_tech_choice_log", 
                "description": "Technology choice logging",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "technology": {"type": "string", "description": "Technology chosen"},
                        "reason": {"type": "string", "description": "Choice reason"}
                    },
                    "required": ["technology"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_design_pattern", 
                "description": "Design patterns",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "pattern": {"type": "string", "description": "Pattern name"},
                        "usage": {"type": "string", "description": "How it's used"}
                    },
                    "required": ["pattern"],
                    "additionalProperties": False
                }
            },
            
            # WORKFLOW TOOLS
            { 
                "name": "mcp_nmp_workflow_discover", 
                "description": "Analyze project + find similar solutions",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "project_data": {"type": "string", "description": "Project data for analysis"}
                    },
                    "required": [],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_workflow_plan", 
                "description": "Planning with experience usage",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "goal": {"type": "string", "description": "Planning goal"}
                    },
                    "required": [],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_session_context", 
                "description": "Work session context",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "session": {"type": "string", "description": "Session description"},
                        "context": {"type": "string", "description": "Session context"}
                    },
                    "required": ["session"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_file_relations", 
                "description": "File relations",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "file": {"type": "string", "description": "File path"},
                        "relations": {"type": "string", "description": "Related files"}
                    },
                    "required": ["file"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_todo_extract", 
                "description": "Extract TODO items",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "content": {"type": "string", "description": "Content to extract TODOs from"}
                    },
                    "required": ["content"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_project_context_restore", 
                "description": "Restore full project context",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "data": {"type": "string", "description": "Data for analysis"}
                    },
                    "required": ["data"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_productivity_track", 
                "description": "Track productivity",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "activity": {"type": "string", "description": "Activity description"},
                        "time": {"type": "string", "description": "Time spent"}
                    },
                    "required": ["activity"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_task_completion", 
                "description": "Task completion",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "task": {"type": "string", "description": "Task description"},
                        "status": {"type": "string", "description": "Completion status"}
                    },
                    "required": ["task"],
                    "additionalProperties": False
                }
            },
            
            # GIT TOOLS
            { 
                "name": "mcp_nmp_git_commit_analyze", 
                "description": "Analyze git commit",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "commit": {"type": "string", "description": "Commit hash or diff"}
                    },
                    "required": ["commit"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_git_pattern_extract", 
                "description": "Extract patterns from git history",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "repository": {"type": "string", "description": "Repository path"}
                    },
                    "required": ["repository"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_commit_wisdom", 
                "description": "Wisdom from commits",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "commits": {"type": "string", "description": "Commit history"}
                    },
                    "required": ["commits"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_branch_strategy", 
                "description": "Branch strategies",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "strategy": {"type": "string", "description": "Branch strategy"}
                    },
                    "required": ["strategy"],
                    "additionalProperties": False
                }
            },
            

            
            # CONTEXT TOOLS (заменили Analytics)
            { 
                "name": "mcp_nmp_context_instant", 
                "description": "Get instant context understanding for current project",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "project": {"type": "string", "description": "Project name (default: current)"},
                        "focus": {"type": "string", "description": "Focus area: my_actions|project_state|code_context"},
                        "time_window": {"type": "string", "description": "Time window: last_session|last_day|last_week"}
                    },
                    "required": [],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_context_work_summary", 
                "description": "Get work session summary with key achievements",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "session_id": {"type": "string", "description": "Session ID (default: current)"},
                        "include_code": {"type": "boolean", "description": "Include code changes"},
                        "include_decisions": {"type": "boolean", "description": "Include decisions made"}
                    },
                    "required": [],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_context_code_intelligence", 
                "description": "Get intelligent code context and suggestions",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "file_path": {"type": "string", "description": "File to analyze"},
                        "analysis_type": {"type": "string", "description": "Type: dependencies|patterns|improvements"},
                        "depth": {"type": "string", "description": "Analysis depth: shallow|deep"}
                    },
                    "required": [],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_context_save", 
                "description": "Save context (dialogue + code + files)",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "conversation": {"type": "string", "description": "Conversation content"},
                        "project": {"type": "string", "description": "Project name"},
                        "tags": {"type": "array", "items": {"type": "string"}, "description": "Tags"},
                        "code_snippets": {"type": "array", "items": {"type": "string"}, "description": "Code snippets"},
                        "files_referenced": {"type": "array", "items": {"type": "string"}, "description": "Referenced files"}
                    },
                    "required": ["conversation"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_context_search", 
                "description": "Smart context search with ready chains",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "query": {"type": "string", "description": "Search query"},
                        "project": {"type": "string", "description": "Project filter"},
                        "include_related": {"type": "boolean", "description": "Include related data"},
                        "qwen_analysis": {"type": "boolean", "description": "Include Qwen analysis"},
                        "limit": {"type": "number", "description": "Max results"}
                    },
                    "required": ["query"],
                    "additionalProperties": False
                }
            },
            { 
                "name": "mcp_nmp_context_restore", 
                "description": "Restore full project context",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "project": {"type": "string", "description": "Project name"},
                        "restore_depth": {"type": "string", "description": "Restore depth: full|summary|recent"},
                        "include_code": {"type": "boolean", "description": "Include code patterns"},
                        "include_files": {"type": "boolean", "description": "Include file relations"},
                        "time_range": {"type": "string", "description": "Time range: all|recent|today"}
                    },
                    "required": [],
                    "additionalProperties": False
                }
            }
        ] 