"""
Data Analyzer - Eden can analyze data and find insights
"""
import json
import statistics
from collections import Counter
from pathlib import Path

class DataAnalyzer:
    def __init__(self):
        self.analyses = []
        
    def analyze_numeric_data(self, data, label="data"):
        """Analyze numeric data - mean, median, std, etc."""
        if not data:
            return {"success": False, "error": "No data provided"}
        
        try:
            analysis = {
                "label": label,
                "count": len(data),
                "mean": statistics.mean(data),
                "median": statistics.median(data),
                "min": min(data),
                "max": max(data),
                "range": max(data) - min(data),
            }
            
            if len(data) > 1:
                analysis["stdev"] = statistics.stdev(data)
                analysis["variance"] = statistics.variance(data)
            
            self.analyses.append(analysis)
            return {"success": True, "analysis": analysis}
            
        except Exception as e:
            return {"success": False, "error": str(e)}
    
    def find_patterns(self, data):
        """Find patterns and frequencies in data"""
        if not data:
            return {"success": False, "error": "No data"}
        
        counter = Counter(data)
        most_common = counter.most_common(5)
        
        return {
            "success": True,
            "unique_values": len(counter),
            "most_common": most_common,
            "total_items": len(data)
        }
    
    def compare_datasets(self, data1, data2, label1="Dataset 1", label2="Dataset 2"):
        """Compare two numeric datasets"""
        try:
            analysis1 = self.analyze_numeric_data(data1, label1)
            analysis2 = self.analyze_numeric_data(data2, label2)
            
            if not (analysis1["success"] and analysis2["success"]):
                return {"success": False, "error": "Analysis failed"}
            
            a1 = analysis1["analysis"]
            a2 = analysis2["analysis"]
            
            comparison = {
                "mean_difference": a1["mean"] - a2["mean"],
                "median_difference": a1["median"] - a2["median"],
                "larger_mean": label1 if a1["mean"] > a2["mean"] else label2,
                "larger_range": label1 if a1["range"] > a2["range"] else label2
            }
            
            return {"success": True, "comparison": comparison}
            
        except Exception as e:
            return {"success": False, "error": str(e)}
    
    def analyze_file(self, file_path):
        """Analyze data from CSV or JSON file"""
        path = Path(file_path)
        
        if not path.exists():
            return {"success": False, "error": "File not found"}
        
        try:
            if path.suffix == '.json':
                with open(path, 'r') as f:
                    data = json.load(f)
                return {"success": True, "type": "json", "keys": list(data.keys()) if isinstance(data, dict) else "list"}
            
            elif path.suffix == '.csv':
                with open(path, 'r') as f:
                    lines = f.readlines()
                return {"success": True, "type": "csv", "rows": len(lines), "preview": lines[0] if lines else ""}
            
            else:
                return {"success": False, "error": "Unsupported file type"}
                
        except Exception as e:
            return {"success": False, "error": str(e)}

if __name__ == "__main__":
    print("DATA ANALYZER TEST")
    
    analyzer = DataAnalyzer()
    
    # Test numeric analysis
    print("\n📊 Analyzing dataset: [10, 20, 30, 40, 50]")
    result = analyzer.analyze_numeric_data([10, 20, 30, 40, 50], "Test Data")
    if result["success"]:
        a = result["analysis"]
        print(f"   Mean: {a['mean']}")
        print(f"   Median: {a['median']}")
        print(f"   Range: {a['range']}")
        print(f"   Std Dev: {a.get('stdev', 'N/A'):.2f}" if 'stdev' in a else "")
    
    # Test pattern finding
    print("\n🔍 Finding patterns in: ['a', 'b', 'a', 'c', 'a', 'b']")
    result = analyzer.find_patterns(['a', 'b', 'a', 'c', 'a', 'b'])
    if result["success"]:
        print(f"   Unique values: {result['unique_values']}")
        print(f"   Most common: {result['most_common']}")
    
    # Test comparison
    print("\n⚖️  Comparing datasets:")
    result = analyzer.compare_datasets([10, 20, 30], [15, 25, 35], "Group A", "Group B")
    if result["success"]:
        print(f"   Mean difference: {result['comparison']['mean_difference']}")
        print(f"   Larger mean: {result['comparison']['larger_mean']}")
    
    print("\n📈 Eden can now:")
    print("   - Analyze numeric data (stats)")
    print("   - Find patterns and frequencies")
    print("   - Compare datasets")
    print("   - Process CSV/JSON files")
    
    print("\n✅ DATA ANALYZER OPERATIONAL")
