#!/usr/bin/env python3
"""
Script pour archiver les anciens trades et garder seulement les trades récents
"""

import json
import os
from datetime import datetime, timedelta
import shutil

# Configuration
TRADE_LOGS_FILE = "trade_logs/trades_log.jsonl"
ARCHIVE_DIR = "trade_logs/archives"
DAYS_TO_KEEP = 7  # Garder seulement les 7 derniers jours

def archive_old_trades():
    """Archive les trades plus anciens que DAYS_TO_KEEP jours"""
    
    if not os.path.exists(TRADE_LOGS_FILE):
        print(f"❌ Fichier {TRADE_LOGS_FILE} introuvable")
        return
    
    # Créer le dossier d'archives
    os.makedirs(ARCHIVE_DIR, exist_ok=True)
    
    # Timestamp pour l'archive
    archive_timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    archive_file = os.path.join(ARCHIVE_DIR, f"trades_archived_{archive_timestamp}.jsonl")
    
    # Date limite (garder seulement après cette date)
    cutoff_date = datetime.now() - timedelta(days=DAYS_TO_KEEP)
    cutoff_timestamp = cutoff_date.timestamp()
    
    print(f"📅 Date limite: {cutoff_date.strftime('%Y-%m-%d %H:%M:%S')}")
    print(f"⏰ Timestamp limite: {cutoff_timestamp}")
    
    # Lire et filtrer les trades
    recent_trades = []
    archived_trades = []
    
    with open(TRADE_LOGS_FILE, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            
            try:
                entry = json.loads(line)
                
                # Extraire le timestamp
                ts = entry.get('timestamp', 0)
                
                # Si c'est une chaîne ISO, la convertir
                if isinstance(ts, str):
                    try:
                        ts = datetime.fromisoformat(ts.replace('Z', '+00:00')).timestamp()
                    except:
                        # Format alternatif
                        ts = datetime.strptime(ts, "%Y-%m-%d %H:%M:%S").timestamp()
                
                # Décider si on garde ou archive
                if ts >= cutoff_timestamp:
                    recent_trades.append(line)
                else:
                    archived_trades.append(line)
            
            except Exception as e:
                # En cas d'erreur, garder la ligne pour ne pas perdre de données
                print(f"⚠️  Erreur de parsing, ligne conservée: {str(e)[:50]}")
                recent_trades.append(line)
    
    print(f"\n📊 Résumé:")
    print(f"   Total trades: {len(recent_trades) + len(archived_trades)}")
    print(f"   ✅ Trades récents (gardés): {len(recent_trades)}")
    print(f"   📦 Trades archivés: {len(archived_trades)}")
    
    # Sauvegarder l'archive si nécessaire
    if archived_trades:
        with open(archive_file, 'w', encoding='utf-8') as f:
            for line in archived_trades:
                f.write(line + '\n')
        print(f"\n✅ Archive créée: {archive_file}")
    
    # Créer une backup du fichier original
    backup_file = f"{TRADE_LOGS_FILE}.backup_{archive_timestamp}"
    shutil.copy2(TRADE_LOGS_FILE, backup_file)
    print(f"💾 Backup créée: {backup_file}")
    
    # Écrire les trades récents dans le fichier principal
    with open(TRADE_LOGS_FILE, 'w', encoding='utf-8') as f:
        for line in recent_trades:
            f.write(line + '\n')
    
    print(f"\n✅ Fichier {TRADE_LOGS_FILE} nettoyé avec succès!")
    print(f"📈 Nouveau total: {len(recent_trades)} trades")

if __name__ == '__main__':
    print("=" * 60)
    print("🗑️  ARCHIVAGE DES ANCIENS TRADES")
    print("=" * 60)
    print(f"\n⚙️  Configuration:")
    print(f"   - Garder les {DAYS_TO_KEEP} derniers jours")
    print(f"   - Fichier: {TRADE_LOGS_FILE}")
    print(f"   - Dossier archives: {ARCHIVE_DIR}")
    
    response = input(f"\n❓ Confirmer l'archivage des trades > {DAYS_TO_KEEP} jours? [o/N]: ")
    
    if response.lower() in ['o', 'oui', 'y', 'yes']:
        archive_old_trades()
    else:
        print("❌ Opération annulée")
