import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';

import 'rxjs/add/operator/map';

import { RPCService } from '@loafer/ng-rpc/service';

import { PageParams, Page } from 'app/commons/model';
import { SensorItem } from '@overflow/commons-typescript/model/sensor-item';
import { Sensor } from '@overflow/commons-typescript/model/sensor';
import { Domain } from '@overflow/commons-typescript/model/domain';
import { Target } from '@overflow/commons-typescript/model/target';


@Injectable()
export class SensorService {

  public constructor(
    private rpcService: RPCService,
  ) {

  }

  public readAllByDomain(domain: Domain, pageParams: PageParams): Observable<Page> {
    return this.rpcService.call('SensorService.readAllByDomain', domain, pageParams);
  }

  public registSensorConfig(sensor: Sensor, sensorItems: SensorItem[]): Observable<Sensor> {
    return this.rpcService.call('SensorService.registSensorConfig', sensor, sensorItems, null);
  }

  public readAllByInfra(infraId: string, pageParams: PageParams): Observable<Page> {
    return this.rpcService.call('SensorService.readAllByInfra', infraId, pageParams);
  }

  public readAllByTarget(target: Target, pageParams: PageParams): Observable<Page> {
    return this.rpcService.call('SensorService.readAllByTarget', target, pageParams);
  }

  public read(id: string): Observable<Sensor> {
    return this.rpcService.call<Sensor>('SensorService.read', id);
  }
}
