// Kurs początkujący: wartościowy system z typowanym przepływem danych.
struct PomiarTemperatury {
    strefa: Text
    wartosc: Float
}

struct AlarmTemperatury {
    strefa: Text
    komunikat: Text
}

task OdbierzPomiar() @server -> chan<PomiarTemperatury> {
    config {
        strefa: Text : "magazyn-A"
        wartosc_testowa: Float : 31.5
    }

    every 2s {
        send PomiarTemperatury {
            strefa: config.strefa,
            wartosc: config.wartosc_testowa
        }
    }
}

task OcenPomiar(wejscie: chan<PomiarTemperatury>) @server -> chan<AlarmTemperatury> {
    config {
        prog_alarmu: Float : 28.0
    }

    loop {
        let pomiar = recv wejscie
        if pomiar.wartosc > config.prog_alarmu {
            send AlarmTemperatury {
                strefa: pomiar.strefa,
                komunikat: "Temperatura przekroczyla bezpieczny prog"
            }
        }
    }
}

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

pipeline StraznikMagazynu {
    use OdbierzPomiar -> OcenPomiar
    use OcenPomiar -> ZapiszAlarm
}
