import { observable } from "mobx"; import { Duration } from "./Duration"; import { Program } from "./Program"; import { Section } from "./Section"; import { SectionRunner } from "./SectionRunner"; export abstract class SprinklersDevice { @observable connected: boolean = false; @observable sections: Section[] = []; @observable programs: Program[] = []; @observable sectionRunner: SectionRunner; abstract get id(): string; abstract runSection(section: number | Section, duration: Duration): Promise<{}>; abstract runProgram(program: number | Program): Promise<{}>; abstract cancelSectionRunById(id: number): Promise<{}>; abstract pauseSectionRunner(): Promise<{}>; abstract unpauseSectionRunner(): Promise<{}>; abstract get sectionConstructor(): typeof Section; abstract get sectionRunnerConstructor(): typeof SectionRunner; abstract get programConstructor(): typeof Program; toString(): string { return `SprinklersDevice{id="${this.id}", connected=${this.connected}, ` + `sections=[${this.sections}], ` + `programs=[${this.programs}], ` + `sectionRunner=${this.sectionRunner} }`; } }