#!/usr/bin/env python3
import os
import sys
import platform
import time

def print_section(title):
    """Helper to print formatted section titles"""
    print("\n" + "="*50)
    print(title)
    print("="*50 + "\n")

def check_python_environment():
    """Verify Python installation and version"""
    print_section("Python Environment")
    print(f"Python version: {platform.python_version()}")
    print(f"Platform: {platform.platform()}")
    print(f"Python path: {sys.executable}")

def check_required_packages():
    """Verify all required packages are installed"""
    print_section("Package Verification")
    required_packages = [
        'networkx',
        'numpy',
        'scipy',
        'matplotlib',
        'seaborn',
        'pandas',
        'plotly',
        'statsmodels',
        'scikit-learn',
        'pytest',
        'tqdm'
    ]
    
    missing_packages = []
    installed_packages = []
    
    for package in required_packages:
        try:
            module = __import__(package)
            version = getattr(module, '__version__', 'unknown')
            installed_packages.append(f"{package} (version {version})")
        except ImportError:
            missing_packages.append(package)
    
    if missing_packages:
        print("WARNING: Missing required packages:")
        for package in missing_packages:
            print(f"  - {package}")
    else:
        print("All required packages are installed:")
        for package in installed_packages:
            print(f"  - {package}")

def check_directories():
    """Verify required directories exist and are writable"""
    print_section("Directory Structure")
    required_dirs = ['data', 'results', 'tests', 'docs']
    
    for directory in required_dirs:
        if os.path.exists(directory):
            writable = os.access(directory, os.W_OK)
            print(f"{directory}/: EXISTS {'(writable)' if writable else '(NOT writable)'}")
        else:
            print(f"{directory}/: MISSING")
            try:
                os.makedirs(directory)
                print(f"  - Created {directory}/ directory")
            except Exception as e:
                print(f"  - Failed to create {directory}/: {str(e)}")

def test_basic_functionality():
    """Test basic functionality of key packages"""
    print_section("Basic Functionality Test")
    
    try:
        import networkx as nx
        import numpy as np
        import matplotlib.pyplot as plt
        
        # Create and save a test plot
        G = nx.Graph()
        G.add_edge(1, 2)
        G.add_edge(2, 3)
        G.add_edge(3, 1)
        
        plt.figure()
        nx.draw(G, with_labels=True)
        test_plot_path = os.path.join('results', 'test_plot.png')
        plt.savefig(test_plot_path)
        plt.close()
        
        print(f"Successfully created test plot: {test_plot_path}")
        
        # Test numpy
        arr = np.array([1, 2, 3])
        print("NumPy array operations: OK")
        
        # Test networkx
        print(f"Graph info - Nodes: {G.number_of_nodes()}, Edges: {G.number_of_edges()}")
        print("NetworkX operations: OK")
        
    except Exception as e:
        print(f"Error during functionality test: {str(e)}")

def main():
    """Main verification routine"""
    start_time = time.time()
    
    print("\nStarting environment verification...\n")
    
    try:
        check_python_environment()
        check_required_packages()
        check_directories()
        test_basic_functionality()
    except Exception as e:
        print(f"\nERROR: Verification failed: {str(e)}")
        sys.exit(1)
    
    duration = time.time() - start_time
    print(f"\nVerification completed in {duration:.2f} seconds")

if __name__ == "__main__":
    main()
