from dataclasses import dataclass, field
from typing import List, Dict, Union, Literal

ModbusDataType = Literal['coil', 'holding_register']

@dataclass
class WriteTask:
    """
    Задача на запись в Modbus устройство
    """
    data_type: ModbusDataType
    address: int
    value: Union[bool, int]
    interval: float = 0.1  # Интервал между записями в секундах
    count: int = 1  # Количество повторов (0 = бесконечно)

@dataclass
class LoadTestConfig:
    """
    Конфигурация нагрузочного теста
    """
    host: str
    port: int = 502
    threads: int = 5  # Количество потоков
    duration: float = 60.0  # Длительность теста в секундах
    tasks: List[WriteTask] = field(default_factory=list)
    auto_reconnect: bool = True  # Автоматическое переподключение
    connection_timeout: float = 2.0  # Таймаут подключения