#!/usr/bin/env python3
"""
Script de migration pour ajouter le champ initial_quantity à la table positions
"""

import sqlite3
import logging

logger = logging.getLogger(__name__)

def migrate_add_initial_quantity():
    """Ajoute le champ initial_quantity à la table positions et l'initialise"""
    try:
        # Ouvrir la connexion à la base de données
        conn = sqlite3.connect('crypto_trader.db')
        cursor = conn.cursor()
        
        # Vérifier si la colonne existe déjà
        cursor.execute("PRAGMA table_info(positions)")
        columns = [column[1] for column in cursor.fetchall()]
        
        if 'initial_quantity' in columns:
            print("La colonne initial_quantity existe déjà")
            return True
        
        print("Ajout de la colonne initial_quantity à la table positions...")
        
        # Ajouter la colonne initial_quantity
        cursor.execute("""
            ALTER TABLE positions 
            ADD COLUMN initial_quantity REAL DEFAULT 0.0
        """)
        
        # Mettre à jour les positions existantes : initial_quantity = size
        cursor.execute("""
            UPDATE positions 
            SET initial_quantity = size 
            WHERE initial_quantity IS NULL OR initial_quantity = 0.0
        """)
        
        # Compter les mises à jour
        updated_count = cursor.rowcount
        
        conn.commit()
        print(f"Migration réussie: {updated_count} positions mises à jour")
        
        # Vérifier le résultat
        cursor.execute("SELECT COUNT(*) FROM positions WHERE initial_quantity > 0")
        count_with_initial = cursor.fetchone()[0]
        
        cursor.execute("SELECT COUNT(*) FROM positions")
        total_count = cursor.fetchone()[0]
        
        print(f"Positions avec initial_quantity: {count_with_initial}/{total_count}")
        
        return True
        
    except Exception as e:
        print(f"Erreur lors de la migration: {e}")
        if conn:
            conn.rollback()
        return False
    finally:
        if conn:
            conn.close()

def verify_migration():
    """Vérifie que la migration s'est bien passée"""
    try:
        conn = sqlite3.connect('crypto_trader.db')
        cursor = conn.cursor()
        
        # Vérifier la structure de la table
        cursor.execute("PRAGMA table_info(positions)")
        columns = {column[1]: column[2] for column in cursor.fetchall()}
        
        if 'initial_quantity' not in columns:
            print("ERREUR: La colonne initial_quantity n'existe pas")
            return False
        
        print(f"initial_quantity type: {columns['initial_quantity']}")
        
        # Vérifier quelques exemples
        cursor.execute("""
            SELECT id, symbol, size, initial_quantity, 
                   CASE WHEN size = initial_quantity THEN 'OK' ELSE 'DIFF' END as check_status
            FROM positions 
            LIMIT 5
        """)
        
        print("\nExemples de positions:")
        print("ID | Symbol | Size | Initial | Status")
        print("-" * 50)
        for row in cursor.fetchall():
            print(f"{row[0][:10]}... | {row[1]} | {row[2]:.3f} | {row[3]:.3f} | {row[4]}")
        
        return True
        
    except Exception as e:
        print(f"Erreur lors de la vérification: {e}")
        return False
    finally:
        if conn:
            conn.close()

def main():
    """Fonction principale"""
    print("MIGRATION: Ajout du champ initial_quantity")
    print("=" * 50)
    
    # Effectuer la migration
    if migrate_add_initial_quantity():
        print("\nVérification de la migration...")
        verify_migration()
        print("\nMigration terminée avec succès!")
    else:
        print("\nErreur lors de la migration!")

if __name__ == "__main__":
    main()