from PySide6.QtCore import QObject, Signal

class SyncController(QObject):
    # 시점 변경 시그널 (인덱스, 데이터행, 보낸사람ID)
    time_changed = Signal(int, object, str)

    # X축 범위 변경 시그널 (min_ms, max_ms, 보낸사람ID)
    # 밀리초(ms)는 1.7e12 수준이라 32-bit int를 초과할 수 있어 object로 받음(오버플로우 방지)
    x_range_changed = Signal(object, object, object)
    
    # 동기화 활성화 여부
    is_sync_enabled = True 

    def __init__(self):
        super().__init__()
        self._total_records = 0

    def request_sync(self, index, data_row, source_id):
        """
        특정 패널에서 시간 변경 요청이 오면,
        동기화가 켜져 있을 때만 다른 패널들에게 전파
        """
        if self.is_sync_enabled:
            # Sync가 켜져있으면 모두에게 알림 (source_id 포함)
            self.time_changed.emit(index, data_row, source_id)
        else:
            # Sync가 꺼져있으면 아무것도 안 함 (각자 놈)
            pass

    def request_x_range_sync(self, min_ms: int, max_ms: int, source_id):
        """
        특정 패널에서 X축(시간축) 범위 변경 요청이 오면,
        동기화가 켜져 있을 때만 다른 패널들에게 전파
        """
        if self.is_sync_enabled:
            # int 캐스팅은 유지하되 시그널 타입은 object라 안전(파이썬 int 그대로 전달)
            self.x_range_changed.emit(int(min_ms), int(max_ms), source_id)

sync_manager = SyncController()