"""
Configuration et Constantes pour la Simulation LEACH/LEACH-C
"""

# ============= PARAMÈTRES DE SIMULATION =============

# Dimensions du champ
FIELD_WIDTH = 100  # mètres
FIELD_HEIGHT = 100  # mètres

# Position de la station de base
BS_POSITION = (0, -100)

# Nombre de nœuds (par scénario)
NUM_NODES_DEFAULT = 100

# Énergie initiale par nœud
INITIAL_ENERGY = 0.5  # Joules

# Probabilité d'élection (p) - varie selon scénario
PROBABILITY_CH_DEFAULT = 0.05

# Taille des paquets en bits (l) - varie selon scénario
PACKET_SIZE_DEFAULT = 2000  # bits

# Mobilité
MAX_DISPLACEMENT_PER_ROUND = 5  # mètres
ENABLE_MOBILITY = True  # False pour mode statique (pas de déplacement)

# Nombre de rounds de simulation
NUM_ROUNDS = 1000  # À adapter selon durée de vie du réseau

# ============= CONSTANTES ÉNERGÉTIQUES =============

# Énergie électronique (transmission/réception par bit)
E_ELEC = 50e-9  # Joules par bit

# Modèle espace libre (courtes distances)
E_FS = 10e-12  # Joules par bit par m²

# Modèle multi-trajet (longues distances)
E_MP = 0.0013e-12  # Joules par bit par m⁴

# Énergie d'agrégation de données
E_DA = 5e-9  # Joules par bit

# Distance seuil (transition espace libre → multi-trajet)
D0 = (E_FS / E_MP) ** 0.5

# ============= SCÉNARIOS DE TEST =============

SCENARIOS = [
    {"l": 2000, "p": 0.05, "n": 100, "name": "Scenario_1_Small_Low"},
    {"l": 2000, "p": 0.5, "n": 100, "name": "Scenario_2_Small_Medium"},
    {"l": 2000, "p": 0.95, "n": 100, "name": "Scenario_3_Small_High"},
    {"l": 4000, "p": 0.05, "n": 100, "name": "Scenario_4_Large_Low"},
    {"l": 4000, "p": 0.05, "n": 200, "name": "Scenario_5_Large_Low_200nodes"},
    {"l": 4000, "p": 0.1, "n": 200, "name": "Scenario_6_Large_LowMed_200nodes"},
]

# ============= PARAMÈTRES DE SIMULATION PAR SCÉNARIO =============

def get_num_rounds_for_scenario(num_nodes):
    """
    Estime le nombre de rounds pour une simulation complète.
    Plus de nœuds = plus d'énergie disponible = plus de rounds.
    """
    return 2000 + (num_nodes - 100) * 5  # Ajustement heuristique

# ============= FLAGS DE DEBUG/LOGGING =============

DEBUG = False
LOG_LEVEL = "INFO"  # DEBUG, INFO, WARNING, ERROR
