// Poziom średniozaawansowany: typowany przepływ w jednym środowisku.
struct Pomiar {
    czujnik: Text
    wartosc: Float
}

struct Alarm {
    czujnik: Text
    komunikat: Text
}

task OdbierzPomiary() @server -> chan<Pomiar> {
    every 5s {
        send Pomiar {
            czujnik: "symulator",
            wartosc: 21.5
        }
    }
}

task SprawdzProg(wejscie: chan<Pomiar>) @server -> chan<Alarm> {
    config {
        prog: Float : 30.0
    }

    loop {
        let pomiar = recv wejscie
        if pomiar.wartosc > config.prog {
            send Alarm {
                czujnik: pomiar.czujnik,
                komunikat: "Przekroczony próg"
            }
        }
    }
}

task ZapiszAlarmy(wejscie: chan<Alarm>) @server {
    for alarm in wejscie {
        log(alarm.komunikat)
    }
}

pipeline Monitoring {
    use OdbierzPomiary -> SprawdzProg
    use SprawdzProg -> ZapiszAlarmy
}
