export type ToolCategory = 'global' | 'canvas' | 'component' | 'theme' | 'database' | 'source' | 'project' | 'git' | 'torch'

export interface ToolMeta {
  name: string
  description: string
  category: ToolCategory
}

// All tool metadata (name, description, category)
export const ALL_TOOL_METAS: ToolMeta[] = [
  // Global tools
  { name: 'get_current_page', description: 'Obtiene la pagina actualmente activa', category: 'global' },
  { name: 'navigate_to', description: 'Navega a una pagina especifica', category: 'global' },
  { name: 'list_available_tools', description: 'Lista todas las herramientas MCP disponibles', category: 'global' },
  { name: 'activate_tool', description: 'Activa una herramienta MCP', category: 'global' },
  { name: 'deactivate_tool', description: 'Desactiva una herramienta MCP', category: 'global' },
  { name: 'pin_tool', description: 'Pinnea una herramienta', category: 'global' },
  { name: 'page_refresh', description: 'Recarga la pagina completamente', category: 'global' },

  // Canvas tools
  { name: 'render_html', description: 'Renderiza HTML en el canvas', category: 'canvas' },
  { name: 'render_vue_component', description: 'Renderiza un componente Vue 3 completo', category: 'canvas' },
  { name: 'move_window', description: 'Mueve una ventana a una posicion especifica', category: 'canvas' },
  { name: 'resize_window', description: 'Cambia el tamano de una ventana', category: 'canvas' },
  { name: 'close_window', description: 'Cierra una ventana del canvas', category: 'canvas' },
  { name: 'list_windows', description: 'Lista todas las ventanas abiertas', category: 'canvas' },
  { name: 'inspect_window', description: 'Inspecciona el contenido de una ventana', category: 'canvas' },
  { name: 'get_canvas', description: 'Lee elementos del canvas con selector CSS', category: 'canvas' },
  { name: 'edit_canvas', description: 'Edita elementos del canvas (old_value -> new_value)', category: 'canvas' },
  { name: 'canvas_css', description: 'Inyecta CSS en el canvas', category: 'canvas' },
  { name: 'canvas_js', description: 'Ejecuta JavaScript en el canvas', category: 'canvas' },
  { name: 'get_canvas_css', description: 'Obtiene CSS inyectado', category: 'canvas' },
  { name: 'save_canvas_snapshot', description: 'Guarda el estado actual del canvas como snapshot', category: 'canvas' },
  { name: 'load_canvas_snapshot', description: 'Restaura un snapshot del canvas', category: 'canvas' },
  { name: 'list_canvas_snapshots', description: 'Lista snapshots del canvas guardados', category: 'canvas' },
  { name: 'delete_canvas_snapshot', description: 'Elimina un snapshot del canvas', category: 'canvas' },

  // Component tools (filesystem-based)
  { name: 'list_fs_components', description: 'Lista componentes Vue del filesystem', category: 'component' },
  { name: 'load_fs_component', description: 'Carga y renderiza un componente desde user-components/', category: 'component' },

  // Theme tools
  { name: 'get_design_tokens', description: 'Obtiene los design tokens del tema activo', category: 'theme' },
  { name: 'get_active_theme', description: 'Obtiene info del tema activo', category: 'theme' },
  { name: 'set_theme_variable', description: 'Modifica una variable CSS del tema', category: 'theme' },
  { name: 'save_theme', description: 'Guarda el tema actual', category: 'theme' },
  { name: 'list_themes', description: 'Lista todos los temas disponibles', category: 'theme' },
  { name: 'switch_theme', description: 'Cambia al tema especificado', category: 'theme' },
  { name: 'reset_theme', description: 'Descarta cambios no guardados', category: 'theme' },

  // Database tools
  { name: 'list_tables', description: 'Lista todas las tablas de la base de datos', category: 'database' },
  { name: 'get_table_schema', description: 'Obtiene el esquema de una tabla', category: 'database' },
  { name: 'get_table_data', description: 'Obtiene los datos de una tabla', category: 'database' },
  { name: 'get_database_stats', description: 'Obtiene estadisticas de la base de datos', category: 'database' },
  { name: 'execute_query', description: 'Ejecuta una consulta SQL SELECT', category: 'database' },

  // Source code tools
  { name: 'get_repo_info', description: 'Obtiene info del repositorio Gitea', category: 'source' },
  { name: 'list_repo_files', description: 'Lista archivos del repositorio', category: 'source' },
  { name: 'read_repo_file', description: 'Lee contenido de un archivo', category: 'source' },
  { name: 'search_repo_code', description: 'Busca codigo en el repositorio', category: 'source' },

  // Project canvas tools
  { name: 'list_canvases', description: 'Lista todos los canvas disponibles', category: 'project' },
  { name: 'create_canvas', description: 'Crea un nuevo project canvas', category: 'project' },
  { name: 'get_canvas', description: 'Obtiene detalles de un canvas', category: 'project' },
  { name: 'update_canvas', description: 'Actualiza un canvas existente', category: 'project' },
  { name: 'delete_canvas', description: 'Elimina un canvas', category: 'project' },
  { name: 'clone_canvas', description: 'Clona un canvas existente', category: 'project' },
  { name: 'add_component_to_canvas', description: 'Agrega un componente a un canvas', category: 'project' },
  { name: 'remove_component_from_canvas', description: 'Remueve un componente de un canvas', category: 'project' },
  { name: 'get_canvas_components', description: 'Obtiene los componentes de un canvas', category: 'project' },

  // Git tools
  { name: 'get_git_status', description: 'Obtiene el estado actual del repositorio Git', category: 'git' },
  { name: 'get_git_diff', description: 'Obtiene el diff de cambios no commiteados', category: 'git' },
  { name: 'compare_commits', description: 'Compara dos commits o ramas', category: 'git' },
  { name: 'git_log', description: 'Obtiene el historial de commits', category: 'git' },
  { name: 'get_git_branches', description: 'Lista todas las ramas del repositorio', category: 'git' },

  // Torch tools (multi-browser MCP control)
  { name: 'list_torch_clients', description: 'Lista browsers conectados al sistema de antorcha', category: 'torch' },
  { name: 'get_torch_status', description: 'Obtiene quien tiene el control del MCP', category: 'torch' },
  { name: 'transfer_torch', description: 'Transfiere el control a otro browser', category: 'torch' },
  { name: 'request_torch', description: 'Solicita el control del MCP', category: 'torch' },
  { name: 'release_torch', description: 'Libera el control del MCP', category: 'torch' }
]

// Get all tool names
export function getAllToolNames(): string[] {
  return ALL_TOOL_METAS.map(t => t.name)
}

// Get tool metadata by name
export function getToolMeta(name: string): ToolMeta | undefined {
  return ALL_TOOL_METAS.find(t => t.name === name)
}

// Get tools by category
export function getToolsByCategory(category: ToolCategory): ToolMeta[] {
  return ALL_TOOL_METAS.filter(t => t.category === category)
}

// Category display info
export const CATEGORY_INFO: Record<ToolCategory, { label: string; color: string; icon: string }> = {
  global: { label: 'Global', color: '#6366f1', icon: 'M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2z' },
  canvas: { label: 'Canvas', color: '#10b981', icon: 'M3 3h18v18H3V3z' },
  component: { label: 'Component', color: '#f59e0b', icon: 'M21 16V8l-7-4-7 4v8l7 4 7-4z' },
  theme: { label: 'Theme', color: '#ec4899', icon: 'M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10' },
  database: { label: 'Database', color: '#3b82f6', icon: 'M12 2C7 2 3 3.5 3 5v14c0 1.5 4 3 9 3s9-1.5 9-3V5c0-1.5-4-3-9-3z' },
  source: { label: 'Source', color: '#8b5cf6', icon: 'M16 18l6-6-6-6M8 6l-6 6 6 6' },
  project: { label: 'Project', color: '#06b6d4', icon: 'M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z' },
  git: { label: 'Git', color: '#f97316', icon: 'M6 3v12M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM18 9a9 9 0 0 1-9 9' },
  torch: { label: 'Torch', color: '#eab308', icon: 'M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z' }
}
