import csv

from .trace import Trace

class CSVTrace(Trace):
    def __init__(self, path=None):
        self.file = open(path)
        self.reader = csv.reader(self.file)

        time, a, b, state = next(self.reader)
        if not time == 'time' and a == 'a' and b == 'b' and state == 'state':
            raise ValueError('improperly formatted csv')

        # first row of data is csv is [duration, -1, -1, nodes]
        duration, _, _, nodes = map(int, next(self.reader))
        super().__init__(duration, nodes)

    def process(self, network):
        ''''''
        env = self.env

        for row in self.reader:
            time, a, b, state = map(int, row)
            if time > env.now:
                yield env.timeout(time - env.now)
            network.set_link(a, b, bool(state))

        self.file.close()