import { observable, IObservableArray } from "mobx"; export class Section { @observable public name: string = ""; @observable public state: boolean = false; } export interface ITimeOfDay { hour: number; minute: number; second: number; millisecond: number; } export enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, } export class Schedule { public times: ITimeOfDay[] = []; public weekdays: Weekday[] = []; public from?: Date = null; public to?: Date = null; } export class Duration { public static fromSeconds(seconds: number): Duration { return new Duration(Math.floor(seconds / 60), seconds % 60); } public minutes: number = 0; public seconds: number = 0; constructor(minutes: number, seconds: number) { this.minutes = minutes; this.seconds = seconds; } public toSeconds(): number { return this.minutes * 60 + this.seconds; } } export interface IProgramItem { // the section number section: number; // duration of the run duration: Duration; } export class Program { @observable public name: string = ""; @observable public enabled: boolean = false; @observable public schedule: Schedule = new Schedule(); @observable public sequence: IProgramItem[] = []; @observable public running: boolean = false; } export abstract class SprinklersDevice { @observable public connected: boolean = false; @observable public sections: IObservableArray
= [] as IObservableArray
; @observable public programs: IObservableArray = [] as IObservableArray; abstract get id(): string; } export interface ISprinklersApi { start(); getDevice(id: string): SprinklersDevice; removeDevice(id: string); }