#!/usr/bin/env python3
"""
MIRA Import Conflict Checker
============================

Prevents Python standard library import conflicts that cause
"Python process exited with code 1" errors in MCP functions.

Run this before deploying MIRA to catch naming conflicts early.
"""

import os
import sys
from pathlib import Path

# Python standard library modules that commonly conflict
DANGEROUS_NAMES = {
    'collections', 'json', 'os', 'sys', 'time', 'logging', 
    'threading', 'subprocess', 'asyncio', 'urllib', 'http',
    'email', 'html', 'xml', 'sqlite3', 'datetime', 'uuid',
    'typing', 'functools', 'itertools', 'operator', 'random'
}

def check_directory_conflicts(python_memory_dir):
    """Check for directory naming conflicts with Python standard library."""
    
    conflicts = []
    core_dir = python_memory_dir / 'core'
    
    if not core_dir.exists():
        print(f"⚠️  Core directory not found: {core_dir}")
        return conflicts
    
    for item in core_dir.iterdir():
        if item.is_dir() and not item.name.startswith('.'):
            if item.name in DANGEROUS_NAMES:
                conflicts.append({
                    'type': 'directory_conflict',
                    'path': str(item),
                    'name': item.name,
                    'suggestion': f"Rename to 'mira_{item.name}' or '{item.name}_mira'"
                })
    
    return conflicts

def check_import_statements(python_memory_dir):
    """Check for problematic import statements."""
    
    issues = []
    
    for py_file in python_memory_dir.rglob('*.py'):
        try:
            with open(py_file, 'r', encoding='utf-8') as f:
                lines = f.readlines()
            
            for line_num, line in enumerate(lines, 1):
                line = line.strip()
                
                # Check for imports from conflicting local directories
                for dangerous_name in DANGEROUS_NAMES:
                    if f"from core.{dangerous_name}" in line or f"import core.{dangerous_name}" in line:
                        issues.append({
                            'type': 'import_conflict',
                            'file': str(py_file),
                            'line': line_num,
                            'content': line,
                            'conflict': dangerous_name
                        })
                        
        except Exception as e:
            print(f"⚠️  Could not read {py_file}: {e}")
    
    return issues

def main():
    """Run comprehensive import conflict checking."""
    
    print("🔍 MIRA Import Conflict Checker")
    print("=" * 40)
    
    # Find python-memory directory
    script_dir = Path(__file__).parent
    python_memory_dir = script_dir.parent / 'python-memory'
    
    if not python_memory_dir.exists():
        print(f"❌ Python memory directory not found: {python_memory_dir}")
        sys.exit(1)
    
    print(f"📁 Checking: {python_memory_dir}")
    print()
    
    # Check directory conflicts
    print("🏗️  Checking directory naming conflicts...")
    dir_conflicts = check_directory_conflicts(python_memory_dir)
    
    if dir_conflicts:
        print(f"❌ Found {len(dir_conflicts)} directory naming conflicts:")
        for conflict in dir_conflicts:
            print(f"   📁 {conflict['path']}")
            print(f"      ⚠️  Conflicts with Python's '{conflict['name']}' module")
            print(f"      💡 Suggestion: {conflict['suggestion']}")
            print()
    else:
        print("✅ No directory naming conflicts found")
    
    print()
    
    # Check import statements
    print("📝 Checking import statements...")
    import_issues = check_import_statements(python_memory_dir)
    
    if import_issues:
        print(f"❌ Found {len(import_issues)} problematic import statements:")
        for issue in import_issues:
            print(f"   📄 {issue['file']}:{issue['line']}")
            print(f"      ⚠️  {issue['content']}")
            print(f"      🔴 Conflicts with Python's '{issue['conflict']}' module")
            print()
    else:
        print("✅ No import statement conflicts found")
    
    print()
    
    # Summary
    total_issues = len(dir_conflicts) + len(import_issues)
    
    if total_issues == 0:
        print("🎉 SUCCESS: No import conflicts detected!")
        print("🚀 MIRA is safe to deploy")
        return 0
    else:
        print(f"🚨 FAILURE: {total_issues} import conflicts detected!")
        print("⛔ Fix these issues before deploying MIRA")
        print("📖 See IMPORT_NAMING_CONVENTIONS.md for guidance")
        return 1

if __name__ == '__main__':
    exit_code = main()
    sys.exit(exit_code)