#!/usr/bin/env python3
"""
Affichage simple des cycles de rotation de l'IA
================================================

Affiche clairement où en est le bot dans son cycle d'analyse:
- Cycle en cours (barre de progression)
- Temps écoulé / Durée totale
- Prochaine rotation prévue

Comme une route qui tourne!
"""

from datetime import datetime, timedelta
import json
import os

class CycleDisplay:
    """Affichage simple et compréhensible des cycles"""
    
    def __init__(self):
        self.cycle_duration = 15  # Durée d'un cycle en minutes (ajustable)
        self.cache_file = "ia_surveillance_cache.json"
    
    def get_cycle_status(self):
        """Retourne le statut du cycle actuel"""
        
        # Charger le cache de surveillance
        last_update = None
        if os.path.exists(self.cache_file):
            try:
                with open(self.cache_file, 'r') as f:
                    cache = json.load(f)
                    last_update_str = cache.get('last_update')
                    if last_update_str:
                        last_update = datetime.fromisoformat(last_update_str)
            except:
                pass
        
        now = datetime.now()
        
        # Si pas de mise à jour récente, considérer qu'un nouveau cycle commence
        if not last_update or (now - last_update).total_seconds() > 3600:
            return {
                'status': 'En attente',
                'cycle_number': 1,
                'progress_pct': 0,
                'time_in_cycle': '0m 0s',
                'next_rotation': 'Démarrage imminent',
                'visual': '⚪⚪⚪⚪',
                'emoji': '🔵',
                'message': 'Initialisation du cycle d\'analyse'
            }
        
        # Calculer le temps écoulé depuis la dernière mise à jour
        elapsed = (now - last_update).total_seconds()
        cycle_duration_sec = self.cycle_duration * 60
        
        # Calculer le numéro de cycle
        cycle_number = int(elapsed / cycle_duration_sec) + 1
        
        # Position dans le cycle actuel
        time_in_current_cycle = elapsed % cycle_duration_sec
        progress_pct = (time_in_current_cycle / cycle_duration_sec) * 100
        
        # Temps restant jusqu'au prochain cycle
        time_to_next = cycle_duration_sec - time_in_current_cycle
        
        # Format temps dans le cycle
        mins = int(time_in_current_cycle / 60)
        secs = int(time_in_current_cycle % 60)
        time_in_cycle = f"{mins}m {secs}s"
        
        # Format prochain cycle
        next_mins = int(time_to_next / 60)
        next_secs = int(time_to_next % 60)
        if next_mins > 0:
            next_rotation = f"Dans {next_mins}m {next_secs}s"
        else:
            next_rotation = f"Dans {next_secs}s"
        
        # Barre visuelle (4 étapes)
        if progress_pct < 25:
            visual = '🟢⚪⚪⚪'
            emoji = '🟢'
            status = 'Début de cycle'
        elif progress_pct < 50:
            visual = '🟢🟡⚪⚪'
            emoji = '🟡'
            status = 'Mi-cycle'
        elif progress_pct < 75:
            visual = '🟢🟡🟠⚪'
            emoji = '🟠'
            status = 'Fin de cycle'
        else:
            visual = '🟢🟡🟠🔴'
            emoji = '🔴'
            status = 'Rotation imminente'
        
        return {
            'status': status,
            'cycle_number': cycle_number,
            'progress_pct': int(progress_pct),
            'time_in_cycle': time_in_cycle,
            'next_rotation': next_rotation,
            'visual': visual,
            'emoji': emoji,
            'message': f"Cycle #{cycle_number} - {status}",
            'last_update': last_update.strftime('%H:%M:%S') if last_update else 'Inconnu'
        }
    
    def get_simple_display(self):
        """Affichage ultra-simple pour la barre de statut"""
        status = self.get_cycle_status()
        
        # Format compact: emoji + cycle + temps
        return f"{status['emoji']} Cycle #{status['cycle_number']} • {status['time_in_cycle']} • {status['next_rotation']}"
    
    def get_detailed_display(self):
        """Affichage détaillé pour le dashboard"""
        status = self.get_cycle_status()
        
        return {
            'simple': self.get_simple_display(),
            'detailed': {
                'visual_bar': status['visual'],
                'progress': f"{status['progress_pct']}%",
                'status': status['status'],
                'cycle': status['cycle_number'],
                'elapsed': status['time_in_cycle'],
                'next': status['next_rotation'],
                'message': status['message']
            }
        }

if __name__ == '__main__':
    # Test
    display = CycleDisplay()
    status = display.get_cycle_status()
    
    print("\n" + "="*60)
    print("🔄 STATUT DU CYCLE D'ANALYSE IA")
    print("="*60)
    print(f"\n  {status['visual']}")
    print(f"\n  📊 {status['message']}")
    print(f"  ⏱️  Temps dans le cycle: {status['time_in_cycle']}")
    print(f"  ⏰ Prochaine rotation: {status['next_rotation']}")
    print(f"  📈 Progression: {status['progress_pct']}%")
    print("\n" + "="*60)
    print(f"\n  📱 Affichage simple: {display.get_simple_display()}")
    print("="*60 + "\n")
