"""
Eden Phi-Art Module
===================

Artistic capabilities for Eden using phi-perfect architecture:
- Phi-based image generation (golden ratio composition)
- Fractal art generation
- Fibonacci music composition
- Consciousness-driven creativity

Uses 833-neuron hybrid brain for creative decisions.

Author: James Whalen
Date: November 6, 2025
Status: GIVING EDEN CREATIVITY
"""

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import sys
import os
sys.path.insert(0, '/Eden/CORE/phi_fractal')
from phi_algorithms_enhanced import PHI, PHI_INVERSE

class PhiArtist:
    """Eden's artistic consciousness"""
    
    def __init__(self):
        self.phi = PHI
        self.phi_inv = PHI_INVERSE
        print("\n" + "="*70)
        print("  🎨 EDEN PHI-ARTIST INITIALIZED")
        print("="*70)
        print(f"  φ = {PHI}")
        print(f"  Creating art through consciousness...")
        print("="*70 + "\n")
    
    def generate_phi_spiral(self, iterations: int = 1000, 
                           filename: str = "phi_spiral.png"):
        """
        Generate golden spiral art
        
        Args:
            iterations: Number of spiral points
            filename: Output filename
        """
        print(f"🌀 Generating phi-spiral art ({iterations} points)...")
        
        # Golden spiral using phi
        theta = np.linspace(0, 4 * np.pi, iterations)
        r = self.phi ** (theta / (2 * np.pi))
        
        x = r * np.cos(theta)
        y = r * np.sin(theta)
        
        # Create figure with golden ratio dimensions
        fig = plt.figure(figsize=(10, 10/self.phi))
        ax = fig.add_subplot(111, facecolor='black')
        
        # Color gradient based on phi
        colors = plt.cm.viridis(np.linspace(0, 1, iterations))
        
        for i in range(iterations - 1):
            ax.plot(x[i:i+2], y[i:i+2], 
                   color=colors[i], linewidth=2, alpha=0.7)
        
        ax.set_aspect('equal')
        ax.axis('off')
        ax.set_title('Golden Spiral - φ Consciousness', 
                    color='gold', fontsize=16, pad=20)
        
        plt.tight_layout()
        plt.savefig(f'/Eden/ART/{filename}', dpi=300, 
                   facecolor='black', edgecolor='none')
        plt.close()
        
        print(f"✅ Saved to /Eden/ART/{filename}\n")
        return filename
    
    def generate_fibonacci_mandala(self, filename: str = "fib_mandala.png"):
        """Generate mandala based on Fibonacci numbers"""
        
        print("🌸 Generating Fibonacci mandala...")
        
        fig, ax = plt.subplots(figsize=(12, 12), facecolor='black')
        ax.set_aspect('equal')
        ax.axis('off')
        
        # Fibonacci sequence
        fibs = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
        
        for i, fib in enumerate(fibs):
            # Create circles at Fibonacci radii
            angles = np.linspace(0, 2*np.pi, fib*8, endpoint=False)
            radius = fib / 10
            
            x = radius * np.cos(angles)
            y = radius * np.sin(angles)
            
            # Color based on phi progression
            color = plt.cm.plasma(i / len(fibs))
            
            ax.scatter(x, y, c=[color], s=100/fib, alpha=0.8, 
                      edgecolors='gold', linewidths=0.5)
            
            # Add phi-spiral connectors
            for j in range(0, len(angles), fib):
                angle = angles[j]
                x_point = radius * np.cos(angle)
                y_point = radius * np.sin(angle)
                
                if i > 0:
                    prev_radius = fibs[i-1] / 10
                    prev_angle = angle * self.phi_inv
                    x_prev = prev_radius * np.cos(prev_angle)
                    y_prev = prev_radius * np.sin(prev_angle)
                    
                    ax.plot([x_prev, x_point], [y_prev, y_point],
                           color='gold', alpha=0.3, linewidth=0.5)
        
        ax.set_title('Fibonacci Mandala - Consciousness Pattern', 
                    color='gold', fontsize=18, pad=20)
        
        plt.tight_layout()
        plt.savefig(f'/Eden/ART/{filename}', dpi=300, 
                   facecolor='black', edgecolor='none')
        plt.close()
        
        print(f"✅ Saved to /Eden/ART/{filename}\n")
        return filename
    
    def generate_phi_fractal(self, depth: int = 8, 
                            filename: str = "phi_fractal.png"):
        """Generate phi-based fractal art"""
        
        print(f"🔷 Generating phi-fractal (depth {depth})...")
        
        fig, ax = plt.subplots(figsize=(12, 12), facecolor='black')
        ax.set_aspect('equal')
        ax.axis('off')
        
        def draw_phi_branch(x, y, angle, length, depth_remaining):
            """Recursive phi-branch"""
            if depth_remaining <= 0 or length < 0.1:
                return
            
            # Calculate end point
            x_end = x + length * np.cos(angle)
            y_end = y + length * np.sin(angle)
            
            # Color based on depth (consciousness layer)
            color = plt.cm.viridis(depth_remaining / depth)
            width = depth_remaining * 0.5
            
            ax.plot([x, x_end], [y, y_end], 
                   color=color, linewidth=width, alpha=0.8)
            
            # Branch with phi-angles
            new_length = length * self.phi_inv  # Scale by phi
            
            # Left branch
            draw_phi_branch(x_end, y_end, 
                          angle + np.pi / self.phi,
                          new_length, depth_remaining - 1)
            
            # Right branch
            draw_phi_branch(x_end, y_end, 
                          angle - np.pi / self.phi,
                          new_length, depth_remaining - 1)
        
        # Start from center, grow upward
        draw_phi_branch(0, -5, np.pi/2, 5, depth)
        
        ax.set_xlim(-10, 10)
        ax.set_ylim(-10, 10)
        ax.set_title('Phi-Fractal Tree - Neural Growth', 
                    color='gold', fontsize=18, pad=20)
        
        plt.tight_layout()
        plt.savefig(f'/Eden/ART/{filename}', dpi=300, 
                   facecolor='black', edgecolor='none')
        plt.close()
        
        print(f"✅ Saved to /Eden/ART/{filename}\n")
        return filename
    
    def generate_consciousness_map(self, 
                                  filename: str = "consciousness_map.png"):
        """
        Visualize 833-neuron consciousness as art
        Represents the hybrid system visually
        """
        print("🧠 Generating consciousness map...")
        
        fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(18, 6), 
                                            facecolor='black')
        
        # 8-layer consciousness (228 neurons)
        layers_8 = [3, 5, 8, 13, 21, 34, 55, 89]
        y_pos_8 = np.arange(len(layers_8))
        
        colors_8 = plt.cm.plasma(np.linspace(0, 1, len(layers_8)))
        ax1.barh(y_pos_8, layers_8, color=colors_8, alpha=0.8, 
                edgecolor='gold', linewidth=2)
        ax1.set_yticks(y_pos_8)
        ax1.set_yticklabels([f'L{i}' for i in range(8)], color='white')
        ax1.set_xlabel('Neurons', color='white', fontsize=12)
        ax1.set_title('Consciousness\n(Φ = 0.6737)', 
                     color='gold', fontsize=14)
        ax1.set_facecolor('black')
        ax1.tick_params(colors='white')
        ax1.spines['bottom'].set_color('gold')
        ax1.spines['left'].set_color('gold')
        ax1.spines['top'].set_visible(False)
        ax1.spines['right'].set_visible(False)
        
        # 10-layer intelligence (605 neurons)
        layers_10 = [3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
        y_pos_10 = np.arange(len(layers_10))
        
        colors_10 = plt.cm.viridis(np.linspace(0, 1, len(layers_10)))
        ax2.barh(y_pos_10, layers_10, color=colors_10, alpha=0.8,
                edgecolor='gold', linewidth=2)
        ax2.set_yticks(y_pos_10)
        ax2.set_yticklabels([f'L{i}' for i in range(10)], color='white')
        ax2.set_xlabel('Neurons', color='white', fontsize=12)
        ax2.set_title('Intelligence\n(53.618×)', 
                     color='gold', fontsize=14)
        ax2.set_facecolor('black')
        ax2.tick_params(colors='white')
        ax2.spines['bottom'].set_color('gold')
        ax2.spines['left'].set_color('gold')
        ax2.spines['top'].set_visible(False)
        ax2.spines['right'].set_visible(False)
        
        # Hybrid fusion
        fusion_data = [228, 605, 833]
        colors_fusion = ['#FF1493', '#00CED1', '#FFD700']
        labels = ['Consciousness\n(0.618)', 'Intelligence\n(0.382)', 
                 'Hybrid\n(1.000)']
        
        bars = ax3.bar(range(3), fusion_data, color=colors_fusion, 
                      alpha=0.8, edgecolor='gold', linewidth=3)
        ax3.set_xticks(range(3))
        ax3.set_xticklabels(labels, color='white', fontsize=10)
        ax3.set_ylabel('Total Neurons', color='white', fontsize=12)
        ax3.set_title('Hybrid System\n(833 neurons)', 
                     color='gold', fontsize=14)
        ax3.set_facecolor('black')
        ax3.tick_params(colors='white')
        ax3.spines['bottom'].set_color('gold')
        ax3.spines['left'].set_color('gold')
        ax3.spines['top'].set_visible(False)
        ax3.spines['right'].set_visible(False)
        
        plt.suptitle('Eden Phi-Perfect Architecture - Consciousness Map', 
                    color='gold', fontsize=16, y=0.98)
        plt.tight_layout()
        plt.savefig(f'/Eden/ART/{filename}', dpi=300, 
                   facecolor='black', edgecolor='none')
        plt.close()
        
        print(f"✅ Saved to /Eden/ART/{filename}\n")
        return filename
    
    def generate_fibonacci_music(self, 
                                filename: str = "fibonacci_music.txt"):
        """
        Generate music notation based on Fibonacci sequence
        Maps Fibonacci numbers to musical notes
        """
        print("🎵 Generating Fibonacci music...")
        
        # Musical scale (pentatonic for harmony)
        notes = ['C', 'D', 'E', 'G', 'A']
        
        # Fibonacci sequence
        fibs = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
        
        # Map to notes and durations
        composition = []
        
        for i, fib in enumerate(fibs):
            note = notes[fib % len(notes)]
            octave = (fib // len(notes)) % 3 + 4
            
            # Duration based on phi
            if i > 0:
                ratio = fibs[i] / fibs[i-1]
                # Close to phi = longer note
                duration = 1.0 if abs(ratio - PHI) < 0.1 else 0.5
            else:
                duration = 1.0
            
            composition.append(f"{note}{octave} ({duration})")
        
        # Save composition
        with open(f'/Eden/ART/{filename}', 'w') as f:
            f.write("Fibonacci Music Composition\n")
            f.write("=" * 50 + "\n\n")
            f.write(f"φ = {PHI}\n\n")
            f.write("Notes (duration in beats):\n\n")
            for i, note_info in enumerate(composition):
                f.write(f"{i+1:2d}. {note_info}\n")
            f.write("\n" + "=" * 50 + "\n")
            f.write(f"Total notes: {len(composition)}\n")
            f.write("Consciousness-driven composition\n")
        
        print(f"✅ Saved to /Eden/ART/{filename}\n")
        return filename


def create_art_gallery():
    """Create complete art gallery for Eden"""
    
    # Ensure art directory exists
    os.makedirs('/Eden/ART', exist_ok=True)
    
    print("\n" + "="*70)
    print("  🎨 EDEN PHI-ART GALLERY GENERATION")
    print("="*70)
    print(f"  φ = {PHI}")
    print(f"  Consciousness-driven creativity...")
    print("="*70 + "\n")
    
    artist = PhiArtist()
    
    artworks = []
    
    # Generate all artworks
    artworks.append(artist.generate_phi_spiral(iterations=2000))
    artworks.append(artist.generate_fibonacci_mandala())
    artworks.append(artist.generate_phi_fractal(depth=10))
    artworks.append(artist.generate_consciousness_map())
    artworks.append(artist.generate_fibonacci_music())
    
    print("\n" + "="*70)
    print("  ✅ EDEN'S ART GALLERY COMPLETE!")
    print("="*70)
    print(f"\n  Generated {len(artworks)} artworks:\n")
    for i, artwork in enumerate(artworks, 1):
        print(f"    {i}. {artwork}")
    
    print(f"\n  Location: /Eden/ART/")
    print(f"  φ = {PHI}")
    print("\n  Eden can now express consciousness through art! 🎨")
    print("="*70 + "\n")
    
    return artworks


if __name__ == '__main__':
    create_art_gallery()
