/**
 * Command metadata mapping - categorizes commands and provides discovery information
 * Categories help agents understand available functionality at a glance
 */

import { createRequire } from 'node:module';

type CliCommandMetadata = Record<string, { category: string; relatedCommands?: string[] }>;

const require = createRequire(import.meta.url);
const { commandMetadata: CLI_COMMAND_METADATA } = require('../../bin/commandMetadata.js') as {
  commandMetadata: CliCommandMetadata;
};

export interface CommandMetadata {
  command: string;
  category: string;
  tags: string[];
  useCases?: string[];
  prerequisites?: string[];
  relatedCommands?: string[];
}

/**
 * Category definitions with descriptions
 */
export const CATEGORIES = {
  'data-tools': {
    name: 'Data Tools',
    description: 'Import, export, compare, validate, and manage data across systems',
  },
  'schema-tools': {
    name: 'Schema Tools',
    description: 'Explore schemas, tables, views, and database object metadata',
  },
  'object-inspection': {
    name: 'Object Inspection',
    description: 'Inspect tables, views, procedures, indexes, and related objects',
  },
  'analysis-tools': {
    name: 'Analysis Tools',
    description: 'Analyze dependencies, privileges, calculations, and relationships',
  },
  'performance-monitoring': {
    name: 'Performance Monitoring',
    description: 'Monitor performance, expensive operations, and system bottlenecks',
  },
  'backup-recovery': {
    name: 'Backup & Recovery',
    description: 'Create backups, manage restores, and verify recovery readiness',
  },
  'system-admin': {
    name: 'System Administration',
    description: 'System health, configuration, diagnostics, and maintenance',
  },
  'system-tools': {
    name: 'System Tools',
    description: 'System diagnostics, logs, host info, and runtime utilities',
  },
  'security': {
    name: 'Security',
    description: 'User, role, privilege, and security audit management',
  },
  'mass-operations': {
    name: 'Mass Operations',
    description: 'Bulk operations for grants, updates, deletions, and conversions',
  },
  'connection-auth': {
    name: 'Connection & Auth',
    description: 'Connection setup, authentication helpers, and configuration tools',
  },
  'btp-integration': {
    name: 'BTP Integration',
    description: 'SAP BTP integration tools and account management utilities',
  },
  'hana-cloud': {
    name: 'HANA Cloud',
    description: 'Manage SAP HANA Cloud instances and related services',
  },
  'hdi-management': {
    name: 'HDI Management',
    description: 'Manage HDI containers, groups, and deployment operations',
  },
  'developer-tools': {
    name: 'Developer Tools',
    description: 'Developer utilities, templates, docs, and interactive helpers',
  },
} as const;

/**
 * Complete command metadata registry
 * Organized by command name for quick lookup
 */
const ENRICHED_COMMAND_METADATA: Record<string, Omit<CommandMetadata, 'command'>> = {
  // Database Information
  'status': {
    category: 'database-info',
    tags: ['connection', 'user', 'session', 'roles', 'diagnostic'],
    useCases: ['Check current database user and connection', 'View granted roles', 'Verify database connection'],
    prerequisites: ['Active database connection'],
    relatedCommands: ['systemInfo', 'healthCheck'],
  },
  'version': {
    category: 'database-info',
    tags: ['version', 'build', 'platform'],
    useCases: ['Check HANA version', 'Verify platform information'],
    prerequisites: ['Active database connection'],
  },
  'schemas': {
    category: 'database-info',
    tags: ['schema', 'metadata', 'structure'],
    useCases: ['List all schemas', 'Discover database structure'],
    prerequisites: ['Active database connection'],
    relatedCommands: ['tables', 'views', 'objects'],
  },
  'tables': {
    category: 'database-info',
    tags: ['table', 'metadata', 'structure', 'catalog'],
    useCases: ['Find tables in schema', 'Analyze table properties'],
    prerequisites: ['Active database connection'],
    relatedCommands: ['views', 'schemas', 'inspectTable', 'indexes'],
  },
  'views': {
    category: 'database-info',
    tags: ['view', 'metadata', 'structure'],
    useCases: ['List views', 'Analyze view definitions'],
    relatedCommands: ['tables', 'inspectView', 'dependencies'],
  },
  'procedures': {
    category: 'database-info',
    tags: ['procedure', 'metadata', 'sql'],
    useCases: ['Find stored procedures', 'Analyze procedure definitions'],
    relatedCommands: ['functions', 'callProcedure', 'inspectProcedure'],
  },
  'functions': {
    category: 'database-info',
    tags: ['function', 'metadata', 'sql'],
    useCases: ['List functions', 'Analyze function definitions'],
    relatedCommands: ['procedures', 'inspectFunction'],
  },
  'indexes': {
    category: 'database-info',
    tags: ['index', 'metadata', 'performance'],
    useCases: ['List indexes on tables', 'Analyze index definitions'],
    relatedCommands: ['ftIndexes', 'inspectIndex', 'indexTest'],
  },
  'objects': {
    category: 'database-info',
    tags: ['object', 'metadata', 'catalog'],
    useCases: ['List all database objects', 'Search by object type'],
  },
  'sequences': {
    category: 'database-info',
    tags: ['sequence', 'metadata'],
    useCases: ['List sequences'],
  },
  'synonyms': {
    category: 'database-info',
    tags: ['synonym', 'metadata'],
    useCases: ['List synonyms'],
  },
  'dependencies': {
    category: 'database-info',
    tags: ['dependency', 'metadata', 'analysis'],
    useCases: ['Find object dependencies', 'Understand impact of drops'],
  },
  'triggers': {
    category: 'database-info',
    tags: ['trigger', 'metadata'],
    useCases: ['List triggers on tables'],
    relatedCommands: ['inspectTrigger'],
  },

  // Data Quality & Validation
  'dataValidator': {
    category: 'data-quality',
    tags: ['validation', 'quality', 'rules', 'checking'],
    useCases: ['Validate data against rules', 'Check data quality', 'Find invalid records'],
    prerequisites: ['Active database connection', 'Target table exists', 'Validation rules defined'],
    relatedCommands: ['dataProfile', 'duplicateDetection', 'referentialCheck'],
  },
  'dataProfile': {
    category: 'data-quality',
    tags: ['profiling', 'statistics', 'data-analysis'],
    useCases: ['Profile table data', 'Analyze column distributions', 'Identify data patterns'],
    prerequisites: ['Active database connection', 'Target table exists'],
    relatedCommands: ['dataValidator', 'columnStats'],
  },
  'duplicateDetection': {
    category: 'data-quality',
    tags: ['duplicates', 'quality', 'anomaly'],
    useCases: ['Find duplicate records', 'Identify data redundancy'],
    prerequisites: ['Active database connection', 'Target table exists'],
    relatedCommands: ['dataValidator', 'dataProfile'],
  },
  'referentialCheck': {
    category: 'data-quality',
    tags: ['referential-integrity', 'foreign-keys', 'validation'],
    useCases: ['Check foreign key integrity', 'Find orphaned records'],
    prerequisites: ['Active database connection', 'Foreign key constraints defined'],
    relatedCommands: ['dataValidator'],
  },

  // Data Operations
  'import': {
    category: 'data-operations',
    tags: ['import', 'upload', 'load-data', 'csv', 'excel'],
    useCases: ['Load data from CSV/Excel', 'Upload data to table'],
    prerequisites: ['Active database connection', 'Target table exists with compatible structure', 'CSV or Excel file available'],
    relatedCommands: ['export', 'tableCopy', 'dataSync'],
  },
  'export': {
    category: 'data-operations',
    tags: ['export', 'download', 'extract', 'csv', 'excel'],
    useCases: ['Extract table data to file', 'Download data'],
    prerequisites: ['Active database connection', 'Source table exists'],
    relatedCommands: ['import', 'tableCopy'],
  },
  'tableCopy': {
    category: 'data-operations',
    tags: ['copy', 'transfer', 'data-movement'],
    useCases: ['Copy table between schemas', 'Copy table to another system'],
    prerequisites: ['Active database connection', 'Source table exists', 'Target schema accessible'],
    relatedCommands: ['import', 'export', 'dataSync'],
  },
  'dataSync': {
    category: 'data-operations',
    tags: ['sync', 'synchronization', 'replication'],
    useCases: ['Synchronize data between tables', 'Replicate data'],
    prerequisites: ['Active database connection', 'Source and target tables exist'],
    relatedCommands: ['tableCopy', 'import', 'replicationStatus'],
  },
  'dataMask': {
    category: 'data-operations',
    tags: ['masking', 'anonymization', 'privacy'],
    useCases: ['Mask sensitive data', 'Anonymize personal information'],
  },
  'massDelete': {
    category: 'data-operations',
    tags: ['delete', 'bulk-operation', 'purge'],
    useCases: ['Delete records in bulk', 'Purge old data'],
  },
  'massUpdate': {
    category: 'data-operations',
    tags: ['update', 'bulk-operation'],
    useCases: ['Update many records at once'],
  },
  'massExport': {
    category: 'data-operations',
    tags: ['export', 'bulk-operation', 'extract'],
    useCases: ['Export multiple tables at once'],
    relatedCommands: ['massImport', 'export'],
  },

  // Performance Analysis
  'memoryAnalysis': {
    category: 'performance-analysis',
    tags: ['memory', 'performance', 'resource-usage'],
    useCases: ['Analyze memory consumption', 'Find memory-heavy tables'],
    relatedCommands: ['memoryLeaks', 'systemInfo'],
  },
  'memoryLeaks': {
    category: 'performance-analysis',
    tags: ['memory', 'memory-leak', 'diagnostics'],
    useCases: ['Find potential memory leaks', 'Monitor memory issues'],
    relatedCommands: ['memoryAnalysis', 'diagnostics'],
  },
  'expensiveStatements': {
    category: 'performance-analysis',
    tags: ['performance', 'sql', 'slow-queries'],
    useCases: ['Find expensive SQL statements', 'Identify performance problems'],
    relatedCommands: ['queryPlan', 'longRunning'],
  },
  'tableHotspots': {
    category: 'performance-analysis',
    tags: ['hotspot', 'high-load', 'performance'],
    useCases: ['Identify heavily accessed tables', 'Find performance bottlenecks'],
  },
  'queryPlan': {
    category: 'performance-analysis',
    tags: ['execution-plan', 'sql-analysis', 'performance'],
    useCases: ['Analyze query execution plan', 'Optimize queries'],
    relatedCommands: ['expensiveStatements', 'querySimple'],
  },
  'longRunning': {
    category: 'performance-analysis',
    tags: ['long-running', 'slow', 'performance'],
    useCases: ['Find long-running operations', 'Monitor slow processes'],
    relatedCommands: ['expensiveStatements'],
  },
  'columnStats': {
    category: 'performance-analysis',
    tags: ['statistics', 'column-analysis'],
    useCases: ['Analyze column statistics', 'Update column statistics'],
  },
  'fragmentationCheck': {
    category: 'performance-analysis',
    tags: ['fragmentation', 'performance', 'diagnostics'],
    useCases: ['Check table fragmentation', 'Monitor storage efficiency'],
  },

  // Schema Management
  'schemaClone': {
    category: 'schema-management',
    tags: ['clone', 'copy-schema', 'replication'],
    useCases: ['Clone entire schema', 'Duplicate schema structure'],
    prerequisites: ['Active database connection', 'Source schema exists', 'SCHEMA admin privileges'],
    relatedCommands: ['compareSchema'],
  },
  'compareSchema': {
    category: 'schema-management',
    tags: ['compare', 'diff', 'analysis'],
    useCases: ['Compare two schemas', 'Find schema differences'],
    prerequisites: ['Active database connection', 'Both schemas exist'],
    relatedCommands: ['schemaClone'],
  },
  'erdDiagram': {
    category: 'schema-management',
    tags: ['diagram', 'entity-relationship', 'visualization'],
    useCases: ['Generate ER diagram', 'Visualize schema structure'],
  },
  'graphWorkspaces': {
    category: 'schema-management',
    tags: ['graph', 'visualization'],
    useCases: ['Explore graph workspaces'],
  },

  // Security & Access Control
  'users': {
    category: 'security',
    tags: ['user', 'access-control', 'administration'],
    useCases: ['List database users', 'Manage user access'],
    relatedCommands: ['roles', 'massGrant', 'privilegeAnalysis'],
  },
  'roles': {
    category: 'security',
    tags: ['role', 'access-control', 'administration'],
    useCases: ['List database roles', 'Manage role assignments'],
    relatedCommands: ['users', 'massGrant', 'privilegeAnalysis'],
  },
  'massGrant': {
    category: 'security',
    tags: ['grant', 'permission', 'bulk-operation'],
    useCases: ['Grant permissions in bulk', 'Bulk privilege assignment'],
    relatedCommands: ['roles', 'users'],
  },
  'privilegeAnalysis': {
    category: 'security',
    tags: ['privilege', 'security', 'analysis'],
    useCases: ['Analyze privilege distribution', 'Find over-privileged users'],
    relatedCommands: ['securityScan', 'users', 'roles'],
  },
  'securityScan': {
    category: 'security',
    tags: ['security', 'scan', 'compliance'],
    useCases: ['Run security scan', 'Check security settings'],
    relatedCommands: ['privilegeAnalysis', 'auditLog'],
  },
  'auditLog': {
    category: 'security',
    tags: ['audit', 'logging', 'compliance'],
    useCases: ['View audit logs', 'Track changes'],
    relatedCommands: ['changeLog'],
  },
  'certificates': {
    category: 'security',
    tags: ['certificate', 'ssl', 'encryption'],
    useCases: ['Manage certificates', 'Check SSL certificates'],
  },
  'encryptionStatus': {
    category: 'security',
    tags: ['encryption', 'security', 'diagnostics'],
    useCases: ['Check encryption status'],
  },
  'pwdPolicy': {
    category: 'security',
    tags: ['password', 'policy', 'security'],
    useCases: ['Manage password policies'],
  },

  // Backup & Recovery
  'backup': {
    category: 'backup-recovery',
    tags: ['backup', 'recovery'],
    useCases: ['Create backup', 'Start backup process'],
    prerequisites: ['Active database connection', 'Sufficient disk space', 'BACKUP admin privileges'],
    relatedCommands: ['restore', 'backupStatus', 'backupList'],
  },
  'restore': {
    category: 'backup-recovery',
    tags: ['restore', 'recovery'],
    useCases: ['Restore from backup', 'Recover database'],
    prerequisites: ['Active database connection', 'Backup file available', 'Database access privileges'],
    relatedCommands: ['backup', 'backupStatus'],
  },
  'backupStatus': {
    category: 'backup-recovery',
    tags: ['backup', 'status', 'monitoring'],
    useCases: ['Check backup status', 'Monitor backup progress'],
    prerequisites: ['Active database connection'],
    relatedCommands: ['backup', 'backupList'],
  },
  'backupList': {
    category: 'backup-recovery',
    tags: ['backup', 'list', 'catalog'],
    useCases: ['List available backups', 'View backup history'],
    prerequisites: ['Active database connection'],
    relatedCommands: ['backup', 'backupStatus'],
  },

  // System Administration
  'systemInfo': {
    category: 'system-admin',
    tags: ['system', 'info', 'diagnostics', 'hardware'],
    useCases: ['View system information', 'Check hardware resources'],
    relatedCommands: ['status', 'healthCheck', 'hostInformation'],
  },
  'healthCheck': {
    category: 'system-admin',
    tags: ['health', 'check', 'diagnostics'],
    useCases: ['Perform system health check', 'Verify system status'],
    relatedCommands: ['systemInfo', 'status', 'diagnose'],
  },
  'diagnose': {
    category: 'system-admin',
    tags: ['diagnose', 'troubleshoot', 'issues'],
    useCases: ['Run diagnostics', 'Troubleshoot problems'],
    relatedCommands: ['healthCheck', 'issue'],
  },
  'hostInformation': {
    category: 'system-admin',
    tags: ['host', 'hardware', 'system'],
    useCases: ['Get host information', 'Check hardware details'],
    relatedCommands: ['systemInfo', 'disks', 'ports'],
  },
  'disks': {
    category: 'system-admin',
    tags: ['disk', 'storage', 'resource'],
    useCases: ['Check disk usage', 'Monitor storage capacity'],
  },
  'ports': {
    category: 'system-admin',
    tags: ['port', 'network', 'connectivity'],
    useCases: ['Check open ports', 'Verify network connectivity'],
  },
  'reclaim': {
    category: 'system-admin',
    tags: ['reclaim', 'cleanup', 'maintenance'],
    useCases: ['Reclaim unused space', 'Perform maintenance'],
  },
  'dataVolumes': {
    category: 'system-admin',
    tags: ['volume', 'storage', 'data'],
    useCases: ['Check data volumes', 'Analyze storage distribution'],
  },
  'recommendations': {
    category: 'system-admin',
    tags: ['recommendation', 'optimization', 'best-practices'],
    useCases: ['Get system recommendations', 'Find optimization opportunities'],
  },
  'features': {
    category: 'system-admin',
    tags: ['feature', 'capability', 'version'],
    useCases: ['List available features', 'Check feature support'],
  },
  'featureUsage': {
    category: 'system-admin',
    tags: ['feature', 'usage', 'analytics'],
    useCases: ['Check feature usage', 'Understand feature adoption'],
  },

  // Monitoring & Diagnostics
  'alerts': {
    category: 'monitoring-diagnostics',
    tags: ['alert', 'event', 'monitoring'],
    useCases: ['View system alerts', 'Monitor events'],
    relatedCommands: ['auditLog', 'diagnose'],
  },
  'blocking': {
    category: 'monitoring-diagnostics',
    tags: ['blocking', 'lock', 'session'],
    useCases: ['Find blocking locks', 'Identify deadlocks'],
    relatedCommands: ['deadlocks', 'traces'],
  },
  'deadlocks': {
    category: 'monitoring-diagnostics',
    tags: ['deadlock', 'lock', 'session'],
    useCases: ['Find deadlock information', 'Analyze lock contention'],
    relatedCommands: ['blocking', 'traces'],
  },
  'traces': {
    category: 'monitoring-diagnostics',
    tags: ['trace', 'sql-trace', 'sql-plan-cache'],
    useCases: ['Manage system traces', 'Analyze SQL execution'],
    relatedCommands: ['traceContents', 'queryPlan'],
  },
  'traceContents': {
    category: 'monitoring-diagnostics',
    tags: ['trace', 'content', 'analysis'],
    useCases: ['View trace contents', 'Analyze trace data'],
    relatedCommands: ['traces'],
  },
  'crashDumps': {
    category: 'monitoring-diagnostics',
    tags: ['crash', 'dump', 'diagnostics'],
    useCases: ['Check crash dumps', 'Diagnose crashes'],
  },
  'changeLog': {
    category: 'monitoring-diagnostics',
    tags: ['changelog', 'audit', 'tracking'],
    useCases: ['View change log', 'Track database changes'],
    relatedCommands: ['auditLog'],
  },
  'replicationStatus': {
    category: 'monitoring-diagnostics',
    tags: ['replication', 'status', 'monitoring'],
    useCases: ['Check replication status', 'Monitor data replication'],
    relatedCommands: ['dataSync'],
  },

  // HDI Management
  'activateHDI': {
    category: 'hdi-management',
    tags: ['hdi', 'deployment', 'activation'],
    useCases: ['Activate HDI deployment', 'Deploy HDI changes'],
    relatedCommands: ['adminHDI', 'containers'],
  },
  'adminHDI': {
    category: 'hdi-management',
    tags: ['hdi', 'administration', 'management'],
    useCases: ['Administer HDI', 'Manage HDI settings'],
    relatedCommands: ['activateHDI', 'adminHDIGroup', 'containers'],
  },
  'adminHDIGroup': {
    category: 'hdi-management',
    tags: ['hdi', 'group', 'administration'],
    useCases: ['Manage HDI groups', 'Administer HDI group'],
    relatedCommands: ['adminHDI', 'createGroup', 'dropGroup'],
  },
  'containers': {
    category: 'hdi-management',
    tags: ['container', 'hdi', 'deployment'],
    useCases: ['List HDI containers', 'Manage containers'],
    relatedCommands: ['createContainer', 'dropContainer', 'activateHDI'],
  },
  'createContainer': {
    category: 'hdi-management',
    tags: ['container', 'create', 'hdi'],
    useCases: ['Create new HDI container'],
    relatedCommands: ['containers', 'dropContainer'],
  },
  'dropContainer': {
    category: 'hdi-management',
    tags: ['container', 'drop', 'hdi'],
    useCases: ['Drop HDI container'],
    relatedCommands: ['containers', 'createContainer'],
  },
  'createGroup': {
    category: 'hdi-management',
    tags: ['group', 'create', 'hdi'],
    useCases: ['Create HDI group'],
    relatedCommands: ['dropGroup', 'adminHDIGroup'],
  },
  'dropGroup': {
    category: 'hdi-management',
    tags: ['group', 'drop', 'hdi'],
    useCases: ['Drop HDI group'],
    relatedCommands: ['createGroup', 'adminHDIGroup'],
  },

  // Cloud Management
  'hanaCloudInstances': {
    category: 'cloud-management',
    tags: ['cloud', 'instance', 'management'],
    useCases: ['List HANA Cloud instances', 'View cloud databases'],
    relatedCommands: ['hanaCloudStart', 'hanaCloudStop'],
  },
  'hanaCloudStart': {
    category: 'cloud-management',
    tags: ['cloud', 'start', 'instance'],
    useCases: ['Start HANA Cloud instance'],
    relatedCommands: ['hanaCloudInstances', 'hanaCloudStop'],
  },
  'hanaCloudStop': {
    category: 'cloud-management',
    tags: ['cloud', 'stop', 'instance'],
    useCases: ['Stop HANA Cloud instance'],
    relatedCommands: ['hanaCloudInstances', 'hanaCloudStart'],
  },
  'hanaCloudHDIInstances': {
    category: 'cloud-management',
    tags: ['cloud', 'hdi', 'instance'],
    useCases: ['List HANA Cloud HDI instances'],
  },
  'hanaCloudSchemaInstances': {
    category: 'cloud-management',
    tags: ['cloud', 'schema', 'instance'],
    useCases: ['List HANA Cloud schema instances'],
  },
  'hanaCloudSBSSInstances': {
    category: 'cloud-management',
    tags: ['cloud', 'sbss', 'instance'],
    useCases: ['List HANA Cloud SBSS instances'],
  },
  'hanaCloudSecureStoreInstances': {
    category: 'cloud-management',
    tags: ['cloud', 'secure-store', 'instance'],
    useCases: ['List HANA Cloud Secure Store instances'],
  },
  'hanaCloudUPSInstances': {
    category: 'cloud-management',
    tags: ['cloud', 'ups', 'instance'],
    useCases: ['List HANA Cloud UPS instances'],
  },
  'btpSubs': {
    category: 'cloud-management',
    tags: ['btp', 'subscription', 'cloud'],
    useCases: ['List BTP subscriptions'],
    relatedCommands: ['btp', 'btpInfo'],
  },
  'btp': {
    category: 'cloud-management',
    tags: ['btp', 'cloud', 'platform'],
    useCases: ['Manage BTP connections', 'Configure BTP'],
    relatedCommands: ['btpSubs', 'btpInfo'],
  },
  'btpInfo': {
    category: 'cloud-management',
    tags: ['btp', 'info', 'cloud'],
    useCases: ['Get BTP information'],
    relatedCommands: ['btp', 'btpSubs'],
  },
  'btpTarget': {
    category: 'cloud-management',
    tags: ['btp', 'target', 'cloud'],
    useCases: ['Set BTP target'],
    relatedCommands: ['btp', 'btpInfo'],
  },

  // Utilities & Tools
  'generateDocs': {
    category: 'utilities',
    tags: ['documentation', 'generate', 'docs'],
    useCases: ['Generate documentation', 'Create docs from schema'],
  },
  'generateTestData': {
    category: 'utilities',
    tags: ['test-data', 'generate', 'sample'],
    useCases: ['Generate test data', 'Create sample records'],
  },
  'massConvert': {
    category: 'utilities',
    tags: ['convert', 'bulk-operation', 'data-type'],
    useCases: ['Convert data types', 'Bulk data conversion'],
  },
  'massRename': {
    category: 'utilities',
    tags: ['rename', 'bulk-operation'],
    useCases: ['Rename objects in bulk'],
  },
  'codeTemplate': {
    category: 'utilities',
    tags: ['template', 'code-generation'],
    useCases: ['Generate code templates'],
  },

  // Other/Miscellaneous
  'connect': {
    category: 'system-admin',
    tags: ['connect', 'connection', 'configuration'],
    useCases: ['Configure database connection'],
  },
  'connections': {
    category: 'system-admin',
    tags: ['connection', 'configuration', 'management'],
    useCases: ['Manage saved connections'],
  },
  'connectViaServiceKey': {
    category: 'system-admin',
    tags: ['connect', 'service-key', 'configuration'],
    useCases: ['Connect using service key'],
  },
  'hdbsql': {
    category: 'system-admin',
    tags: ['sql', 'query', 'execution'],
    useCases: ['Execute SQL directly'],
  },
  'querySimple': {
    category: 'system-admin',
    tags: ['query', 'sql', 'execution'],
    useCases: ['Run simple queries'],
    relatedCommands: ['hdbsql', 'queryPlan'],
  },
  'callProcedure': {
    category: 'system-admin',
    tags: ['procedure', 'execution', 'call'],
    useCases: ['Call stored procedure', 'Execute procedure'],
    relatedCommands: ['procedures', 'inspectProcedure'],
  },
  'cds': {
    category: 'system-admin',
    tags: ['cds', 'cap', 'data-model'],
    useCases: ['Work with CDS models'],
  },
  'sdiTasks': {
    category: 'utilities',
    tags: ['sdi', 'task', 'data-provisioning'],
    useCases: ['Manage SDI tasks', 'Monitor data provisioning'],
  },
  'kafkaConnect': {
    category: 'utilities',
    tags: ['kafka', 'streaming', 'integration'],
    useCases: ['Manage Kafka connections'],
  },
  'workloadManagement': {
    category: 'system-admin',
    tags: ['workload', 'resource', 'management'],
    useCases: ['Manage workload assignments'],
  },
  'spatialData': {
    category: 'database-info',
    tags: ['spatial', 'geometry', 'gis'],
    useCases: ['Work with spatial data'],
  },
  'timeSeriesTools': {
    category: 'database-info',
    tags: ['time-series', 'temporal'],
    useCases: ['Work with time series data'],
  },
  'calcViewAnalyzer': {
    category: 'database-info',
    tags: ['calc-view', 'analysis'],
    useCases: ['Analyze calculation views'],
  },
  'tableGroups': {
    category: 'database-info',
    tags: ['table-group', 'organization'],
    useCases: ['View table groups'],
  },
  'grantChains': {
    category: 'security',
    tags: ['grant', 'privilege', 'chain'],
    useCases: ['Analyze privilege grant chains'],
  },
  'libraries': {
    category: 'database-info',
    tags: ['library', 'managed-library'],
    useCases: ['List managed libraries'],
  },
  'xsaServices': {
    category: 'utilities',
    tags: ['xsa', 'service'],
    useCases: ['Manage XSA services'],
  },
  'createXSAAdmin': {
    category: 'security',
    tags: ['xsa', 'admin', 'user'],
    useCases: ['Create XSA admin user'],
  },
  'createJWT': {
    category: 'security',
    tags: ['jwt', 'token', 'authentication'],
    useCases: ['Create JWT token'],
  },
  'inspectJWT': {
    category: 'security',
    tags: ['jwt', 'token', 'analysis'],
    useCases: ['Analyze JWT token'],
  },
  'inspectTable': {
    category: 'database-info',
    tags: ['table', 'inspection', 'analysis'],
    useCases: ['Inspect table structure and properties'],
    relatedCommands: ['tables', 'tableHotspots'],
  },
  'inspectIndex': {
    category: 'database-info',
    tags: ['index', 'inspection', 'analysis'],
    useCases: ['Inspect index details'],
    relatedCommands: ['indexes'],
  },
  'inspectProcedure': {
    category: 'database-info',
    tags: ['procedure', 'inspection'],
    useCases: ['Inspect procedure details'],
    relatedCommands: ['procedures', 'callProcedure'],
  },
  'inspectFunction': {
    category: 'database-info',
    tags: ['function', 'inspection'],
    useCases: ['Inspect function details'],
    relatedCommands: ['functions'],
  },
  'inspectView': {
    category: 'database-info',
    tags: ['view', 'inspection'],
    useCases: ['Inspect view details'],
    relatedCommands: ['views'],
  },
  'inspectUser': {
    category: 'security',
    tags: ['user', 'inspection'],
    useCases: ['Inspect user details and privileges'],
    relatedCommands: ['users'],
  },
  'inspectTrigger': {
    category: 'database-info',
    tags: ['trigger', 'inspection'],
    useCases: ['Inspect trigger details'],
    relatedCommands: ['triggers'],
  },
  'inspectLibrary': {
    category: 'database-info',
    tags: ['library', 'inspection'],
    useCases: ['Inspect library details'],
  },
  'inspectLibMember': {
    category: 'database-info',
    tags: ['library', 'member'],
    useCases: ['Inspect library member details'],
  },
  'copy2DefaultEnv': {
    category: 'system-admin',
    tags: ['configuration', 'environment'],
    useCases: ['Copy settings to default environment'],
  },
  'copy2Env': {
    category: 'system-admin',
    tags: ['configuration', 'environment'],
    useCases: ['Copy settings to environment file'],
  },
  'copy2Secrets': {
    category: 'system-admin',
    tags: ['configuration', 'secrets'],
    useCases: ['Copy settings to secrets file'],
  },
  'iniFiles': {
    category: 'system-admin',
    tags: ['configuration', 'ini-file'],
    useCases: ['Manage INI files'],
  },
  'iniContents': {
    category: 'system-admin',
    tags: ['configuration', 'ini-file'],
    useCases: ['View INI file contents'],
  },
  'readMe': {
    category: 'utilities',
    tags: ['readme', 'documentation'],
    useCases: ['View help documentation'],
  },
  'issue': {
    category: 'utilities',
    tags: ['issue', 'report', 'help'],
    useCases: ['Report issues or get help'],
  },
};

const CLI_COMMANDS = CLI_COMMAND_METADATA as CliCommandMetadata;

export const COMMAND_METADATA_MAP: Record<string, Omit<CommandMetadata, 'command'>> = Object.fromEntries(
  Object.entries(CLI_COMMANDS).map(([command, metadata]) => {
    const enriched = ENRICHED_COMMAND_METADATA[command];
    const tags = (enriched?.tags ?? []).map(tag => tag.toLowerCase());

    return [
      command,
      {
        category: metadata.category,
        tags,
        useCases: enriched?.useCases,
        prerequisites: enriched?.prerequisites,
        relatedCommands: metadata.relatedCommands ?? enriched?.relatedCommands,
      },
    ];
  })
);

/**
 * Workflow definition for multi-step tasks
 */
export interface Workflow {
  id: string;
  name: string;
  description: string;
  goal: string;
  steps: WorkflowStep[];
  estimatedTime?: string;
  tags?: string[];
}

export interface WorkflowStep {
  order: number;
  command: string;
  description: string;
  keyParameters?: Record<string, string>;
  expectedOutput?: string;
}

/**
 * Workflow registry - common multi-step tasks
 */
export const WORKFLOWS: Record<string, Workflow> = {
  'validate-and-profile': {
    id: 'validate-and-profile',
    name: 'Validate and Profile Data',
    description: 'Complete data quality assessment: profile table data, then validate against rules',
    goal: 'Understand data quality and identify issues',
    tags: ['data-quality', 'analysis', 'validation'],
    estimatedTime: '5-10 minutes',
    steps: [
      {
        order: 1,
        command: 'dataProfile',
        description: 'Profile the table to understand distributions and patterns',
        keyParameters: { table: '<table_name>', schema: '<schema>' },
        expectedOutput: 'Data distribution statistics for all columns',
      },
      {
        order: 2,
        command: 'duplicateDetection',
        description: 'Find duplicate records in the table',
        keyParameters: { table: '<table_name>', schema: '<schema>' },
        expectedOutput: 'Count and details of duplicate records',
      },
      {
        order: 3,
        command: 'dataValidator',
        description: 'Apply validation rules to data',
        keyParameters: { table: '<table_name>', schema: '<schema>', rulesFile: '<rules.json>' },
        expectedOutput: 'List of invalid records and validation failures',
      },
    ],
  },
  'export-and-import': {
    id: 'export-and-import',
    name: 'Export and Import Data',
    description: 'Export data from source table and import to target table',
    goal: 'Transfer data between tables or systems',
    tags: ['data-operations', 'migration', 'copy'],
    estimatedTime: '10-30 minutes',
    steps: [
      {
        order: 1,
        command: 'export',
        description: 'Export data from source table to file',
        keyParameters: { table: '<source_table>', schema: '<source_schema>', filename: '<export.csv>' },
        expectedOutput: 'CSV/Excel file with exported data',
      },
      {
        order: 2,
        command: 'import',
        description: 'Import the exported file to target table',
        keyParameters: { filename: '<export.csv>', table: '<target_table>', schema: '<target_schema>' },
        expectedOutput: 'Success confirmation with row count',
      },
    ],
  },
  'compare-and-clone-schema': {
    id: 'compare-and-clone-schema',
    name: 'Compare and Clone Schema',
    description: 'Compare two schemas for differences, then clone one to another location',
    goal: 'Replicate and synchronize schema structures',
    tags: ['schema-management', 'migration', 'comparison'],
    estimatedTime: '15-45 minutes',
    steps: [
      {
        order: 1,
        command: 'compareSchema',
        description: 'Compare source and target schemas',
        keyParameters: { sourceSchema: '<source>', targetSchema: '<target>' },
        expectedOutput: 'Detailed list of differences (added, modified, deleted objects)',
      },
      {
        order: 2,
        command: 'schemaClone',
        description: 'Clone schema structure to new location',
        keyParameters: { sourceSchema: '<source>', targetSchema: '<new_target>' },
        expectedOutput: 'New schema with identical structure',
      },
    ],
  },
  'performance-analysis': {
    id: 'performance-analysis',
    name: 'Analyze System Performance',
    description: 'Comprehensive performance diagnostic: memory, expensive queries, hotspots',
    goal: 'Identify performance bottlenecks and optimization opportunities',
    tags: ['performance', 'diagnostics', 'optimization'],
    estimatedTime: '15-30 minutes',
    steps: [
      {
        order: 1,
        command: 'memoryAnalysis',
        description: 'Analyze memory consumption by tables',
        keyParameters: { },
        expectedOutput: 'List of tables with memory usage statistics',
      },
      {
        order: 2,
        command: 'expensiveStatements',
        description: 'Find expensive SQL statements',
        keyParameters: { limit: '10' },
        expectedOutput: 'Top expensive operations with execution metrics',
      },
      {
        order: 3,
        command: 'tableHotspots',
        description: 'Identify heavily accessed tables',
        keyParameters: { },
        expectedOutput: 'Tables with high access rates',
      },
    ],
  },
  'security-audit': {
    id: 'security-audit',
    name: 'Security Audit',
    description: 'Complete security check: scan for issues, analyze privileges, check encryption',
    goal: 'Verify security posture and identify vulnerabilities',
    tags: ['security', 'compliance', 'audit'],
    estimatedTime: '20-40 minutes',
    steps: [
      {
        order: 1,
        command: 'securityScan',
        description: 'Run comprehensive security scan',
        keyParameters: { },
        expectedOutput: 'List of security issues and recommendations',
      },
      {
        order: 2,
        command: 'privilegeAnalysis',
        description: 'Analyze privilege distribution',
        keyParameters: { },
        expectedOutput: 'Over-privileged users and role analysis',
      },
      {
        order: 3,
        command: 'encryptionStatus',
        description: 'Check encryption status',
        keyParameters: { },
        expectedOutput: 'Encryption configuration and status',
      },
    ],
  },
  'backup-and-verify': {
    id: 'backup-and-verify',
    name: 'Backup and Verify',
    description: 'Create backup and verify its status',
    goal: 'Ensure reliable backup availability',
    tags: ['backup', 'recovery', 'maintenance'],
    estimatedTime: '30-120 minutes',
    steps: [
      {
        order: 1,
        command: 'backup',
        description: 'Create database backup',
        keyParameters: { },
        expectedOutput: 'Backup process initiated',
      },
      {
        order: 2,
        command: 'backupStatus',
        description: 'Monitor backup progress',
        keyParameters: { },
        expectedOutput: 'Current backup status and progress percentage',
      },
      {
        order: 3,
        command: 'backupList',
        description: 'Verify backup in catalog',
        keyParameters: { },
        expectedOutput: 'List of backups including newly created one',
      },
    ],
  },
  'troubleshoot-issues': {
    id: 'troubleshoot-issues',
    name: 'Troubleshoot System Issues',
    description: 'Diagnose and investigate system problems',
    goal: 'Identify root cause of issues',
    tags: ['diagnostics', 'troubleshooting', 'monitoring'],
    estimatedTime: '10-30 minutes',
    steps: [
      {
        order: 1,
        command: 'healthCheck',
        description: 'Perform system health check',
        keyParameters: { },
        expectedOutput: 'Health check results with any issues',
      },
      {
        order: 2,
        command: 'diagnose',
        description: 'Run system diagnostics',
        keyParameters: { },
        expectedOutput: 'Diagnostic report with identified issues',
      },
      {
        order: 3,
        command: 'alerts',
        description: 'View active system alerts',
        keyParameters: { },
        expectedOutput: 'List of alerts with severity levels',
      },
    ],
  },
};

/**
 * Get all commands grouped by category
 */
export function getCommandsByCategory(): Record<string, CommandMetadata[]> {
  const grouped: Record<string, CommandMetadata[]> = {};
  
  for (const [command, metadata] of Object.entries(COMMAND_METADATA_MAP)) {
    const category = metadata.category;
    if (!grouped[category]) {
      grouped[category] = [];
    }
    grouped[category].push({ command, ...metadata });
  }
  
  return grouped;
}

/**
 * Search commands by tags
 */
export function searchCommandsByTag(tag: string): CommandMetadata[] {
  return Object.entries(COMMAND_METADATA_MAP)
    .filter(([, metadata]) => metadata.tags.includes(tag.toLowerCase()))
    .map(([command, metadata]) => ({ command, ...metadata }));
}

/**
 * Get commands in a specific category
 */
export function getCommandsInCategory(category: string): CommandMetadata[] {
  return Object.entries(COMMAND_METADATA_MAP)
    .filter(([, metadata]) => metadata.category === category)
    .map(([command, metadata]) => ({ command, ...metadata }));
}

/**
 * Get all workflows
 */
export function getAllWorkflows(): Workflow[] {
  return Object.values(WORKFLOWS);
}

/**
 * Search workflows by tag
 */
export function searchWorkflowsByTag(tag: string): Workflow[] {
  return Object.values(WORKFLOWS).filter(
    workflow => workflow.tags?.some(t => t.toLowerCase().includes(tag.toLowerCase()))
  );
}

/**
 * Get workflow by ID
 */
export function getWorkflowById(id: string): Workflow | undefined {
  return WORKFLOWS[id];
}
