import functools


@functools.total_ordering
class Label:
    def __init__(self, attack_name, timestamp_start, timestamp_end, injected_packets, seed, parameters, attack_note=""):
        """
        Creates a new attack label

        :param attack_name: The name of the associated attack
        :param timestamp_start: The timestamp as unix time of the first attack packet
        :param timestamp_end: The timestamp as unix time of the last attack packet
        :param injected_packets: The number of packets injected by the attack
        :param seed: The seed used for randomization
        :param parameters: The list of parameters used to run the attack
        :param attack_note: A note associated to the attack (optional)
        """
        self.attack_name = attack_name
        self.timestamp_start = timestamp_start
        self.timestamp_end = timestamp_end
        self.injected_packets = injected_packets
        self.seed = seed
        self.attack_note = attack_note
        self.parameters = parameters

    def __eq__(self, other):
        return self.timestamp_start == other.timestamp_start

    def __lt__(self, other):
        return self.timestamp_start < other.timestamp_start

    def __gt__(self, other):
        return self.timestamp_start > other.timestamp_start

    def __str__(self):
        # FIXME: maybe add self.parameters as well?
        return ''.join(
            ['(', self.attack_name, ',', self.attack_note, ',', str(self.timestamp_start), ',', str(self.timestamp_end),
             str(self.injected_packets), ',', str(self.seed), ')'])