from cairs_coor import *


class Signal():
    def __init__(self, signal, sensor, coor, angle=0.0):
        """
        :param signal:  signal obtained by sensor
        :param sensor: sensor
        :param coor: coordinates of the sensor
        :param angle: direction in rad, rotations centre is 'coor'
        """
        self.signal = signal
        self.sensor = sensor
        self.coor = coor
        self.angle = angle

    def __str__(self):
        print("Signal:")
        print("- position: %s" % self.coor)
        print("- angle: %s ", self.angle)
        print("- measured value: %s " % self.signal)
        print("- signal type: %s" % type)
        print("- sensor: %s" % str(self.sensor))


def find_near_signals(loc_pred, signals, delta):
    # Find the extrem time-coordiantes of 'loc_pred'
    tmin = float("inf")
    tmax = -float("inf")
    for loc in loc_pred:
        if type(loc) == type(Domain):
            t1 = loc.position.time
            t2 = (loc.position + loc.extend).time
            tmin = min(tmin, t1, t2)
            tmax = max(tmax, t1, t2)
        else:
            tmin = min(tmin, loc.time)
            tmax = max(tmax, loc.time)

    tmin -= delta
    tmax += delta

    # Find signals that are within (tmin, tmax)
    signals_near = []
    for sig in signals:
        t = [sig.position.time,
             (sig.position + sig.sensor.domain_extent).time,
             [(sig.position + i).time for i in sig.sensor.delta_coor]]

        # if any(t .< tmax) && any(t .> tmin)
        #    push!(signals_near, sig)
        if all(i < tmax for i in t) and all(i > tmin for i in t):  #TODO check it
            signals_near.append(sig)

    return signals_near

