/*
******************************************************************************
* Copyright © 2018 PTA GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
*
*     http://www.eclipse.org/legal/epl-v10.html
*
******************************************************************************
*/
import { Injectable } from '@angular/core';
import { GridConfig } from '../model/grid-config';
import { Observable } from 'rxjs';
import { BaseHttpService, HttpCallInfo, HttpMethodEn } from './base-http.service';
import { SessionContext } from '../common/session-context';
import { Globals } from '../common/globals';

@Injectable()
export class ModifyGridConfigService {

  constructor(
    private baseHttpService: BaseHttpService,
    private sessionContext: SessionContext) {
  }

  setGridConfig(modifyGridConfig: GridConfig): Observable<GridConfig> {
    return this.baseHttpService.callService(
      new HttpCallInfo(Globals.GRID_MEASURES_SERVICE_NAME, HttpMethodEn.get, '/setGridConfig/?' +
        'skipForApproval=' + modifyGridConfig.skipForApproval + '&' +
        'endAfterApproved=' + modifyGridConfig.endAfterApproved + '&' +
        'skipRequesting=' + modifyGridConfig.skipRequesting + '&' +
        'endAfterReleased=' + modifyGridConfig.endAfterReleased + '&' +
        'skipInWork=' + modifyGridConfig.skipInWork
        , null),
      this.sessionContext);
  }
}
