import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { RPCService } from '@loafer/ng-rpc';
import { Infra } from '@overflow/commons-typescript/model/infra';
import { Host, Service } from '@overflow/commons-typescript';

@Injectable()
export class InfraService {

  public constructor(
    private rpcService: RPCService,
  ) {

  }

  public regist(infra: Infra): Observable<Infra> {
    return this.rpcService.call<Infra>('InfraService.regist', infra);
  }

  public registDiscoverd(probeID: number, hosts: Host[], services: Service[]): Observable<Infra[]> {
    return this.rpcService.call<Infra[]>('InfraService.registDiscoverd', probeID, hosts, services);
  }

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

  public readAllByProbeID(probeID: number): Observable<Infra[]> {
    return this.rpcService.call<Infra[]>('InfraService.readAllByProbeID', probeID);
  }

  public readAllByDomainID(domainID: number): Observable<Infra[]> {
    return this.rpcService.call<Infra[]>('InfraService.readAllByDomainID', domainID);
  }

  public readAllInfraZoneByProbeDomainID(probeDomainID: number): Observable<Infra[]> {
    return this.rpcService.call<Infra[]>('InfraService.readAllInfraZoneByProbeDomainID', probeDomainID);
  }

  public readAllByMetaInfraTypeKeyAndProbeID(metaInfraTypeKey: string, probeID: number): Observable<Infra[]> {
    return this.rpcService.call<Infra[]>('InfraService.readAllByMetaInfraTypeKeyAndProbeID', metaInfraTypeKey, probeID);
  }

}
