"""
B-ASIC Signal Flow Graph Module.
TODO: More info.
"""

from b_asic.operation import OperationId, Operation
from b_asic.basic_operation import BasicOperation
from b_asic.signal import SignalSource, SignalDestination
from b_asic.simulation import SimulationState, OperationState
from typing import List


class SFG(BasicOperation):
	"""
	Signal flow graph.
	TODO: More info.
	"""

	_operations: List[Operation]

	def __init__(self, identifier: OperationId, input_destinations: List[SignalDestination], output_sources: List[SignalSource]):
		"""
		Construct a SFG.
		"""
		super().__init__(identifier)
		# TODO: Allocate input/output ports with appropriate IDs.
		self._operations = []
		# TODO: Traverse the graph between the inputs/outputs and add to self._operations.
		# TODO: Connect ports with signals with appropriate IDs.

	def evaluate(self, inputs: list) -> list:
		return [] # TODO: Implement

	def split(self) -> List[Operation]:
		return self._operations

	# TODO: More stuff.