#!/usr/bin/env python3
"""
Script pour générer des périphériques de test
"""
import sys
from pathlib import Path
from datetime import datetime, timedelta
import random

# Add app to path
sys.path.insert(0, str(Path(__file__).parent))

from app.db.session import get_peripherals_db
from app.models.peripheral import Peripheral


# Données de test
TYPES = [
    "USB", "Stockage", "Réseau", "Audio", "Vidéo", "Clavier", "Souris",
    "Webcam", "Adaptateur", "Hub", "Carte réseau", "Bluetooth"
]

MARQUES = [
    "Logitech", "SanDisk", "Kingston", "TP-Link", "D-Link", "Razer",
    "Corsair", "Samsung", "Western Digital", "Seagate", "Crucial",
    "Intel", "Realtek", "Broadcom", "Generic", "Microsoft"
]

ETATS = ["Neuf", "Bon", "Usagé", "Défectueux"]

BOUTIQUES = ["Amazon", "LDLC", "Rue du Commerce", "CDiscount", "Materiel.net", "Ebay"]


def generate_peripherals(count=40):
    """Génère des périphériques de test"""
    db = next(get_peripherals_db())

    try:
        print(f"🔧 Génération de {count} périphériques de test...")
        print("=" * 60)

        for i in range(1, count + 1):
            type_principal = random.choice(TYPES)
            marque = random.choice(MARQUES)

            # Générer nom basé sur type et marque
            nom = f"{marque} {type_principal} {random.randint(100, 9999)}"

            # Modèle
            modeles = [
                f"Model {chr(65 + random.randint(0, 25))}{random.randint(100, 999)}",
                f"Pro {random.randint(1, 5)}",
                f"Elite {random.choice(['X', 'S', 'Pro', 'Plus'])}",
                f"{random.choice(['Ultra', 'Super', 'Mega'])} {random.randint(100, 999)}"
            ]
            modele = random.choice(modeles)

            # Créer périphérique
            peripheral = Peripheral(
                nom=nom,
                type_principal=type_principal,
                marque=marque,
                modele=modele,
                numero_serie=f"SN{random.randint(100000, 999999)}",
                etat=random.choice(ETATS),
                rating=random.randint(0, 5),
                quantite_totale=random.randint(1, 5),
                quantite_disponible=random.randint(0, 5),
                prix=round(random.uniform(5.99, 199.99), 2) if random.random() > 0.2 else None,
                devise="EUR",
                boutique=random.choice(BOUTIQUES) if random.random() > 0.3 else None,
                date_achat=(datetime.now() - timedelta(days=random.randint(0, 730))).date() if random.random() > 0.4 else None,
                garantie_duree_mois=random.choice([12, 24, 36]) if random.random() > 0.5 else None,
                synthese=f"Périphérique de test #{i}\n\nGénéré automatiquement pour tester la pagination." if random.random() > 0.7 else None,
                notes=f"Notes de test pour le périphérique #{i}" if random.random() > 0.6 else None,
            )

            db.add(peripheral)

            if i % 10 == 0:
                db.commit()
                print(f"  ✅ {i}/{count} périphériques créés")

        db.commit()
        print("\n" + "=" * 60)
        print(f"✅ {count} périphériques de test créés avec succès !")

        # Statistiques
        total = db.query(Peripheral).count()
        print(f"📊 Total dans la base : {total} périphériques")

    except Exception as e:
        print(f"❌ Erreur : {e}")
        db.rollback()
    finally:
        db.close()


if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser(description='Générer des périphériques de test')
    parser.add_argument('--count', type=int, default=40, help='Nombre de périphériques à générer (défaut: 40)')
    args = parser.parse_args()

    generate_peripherals(args.count)
