/**
 * OpenAPI spec version: 1.0
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */
import { HttpClient, HttpHeaders, HttpResponse, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
import { OcTokenService } from './token.service';
import { ListSpec } from '../model/listSpec';
import { ListSpecOption } from '../model/listSpecOption';
import { ListSpecProductAssignment } from '../model/listSpecProductAssignment';
import { Spec } from '../model/spec';
import { SpecOption } from '../model/specOption';
import { SpecProductAssignment } from '../model/specProductAssignment';
import { Configuration } from '../configuration';
export declare class OcSpecService {
    protected httpClient: HttpClient;
    protected ocTokenService: OcTokenService;
    protected basePath: string;
    defaultHeaders: HttpHeaders;
    configuration: Configuration;
    private impersonating;
    constructor(httpClient: HttpClient, ocTokenService: OcTokenService, basePath: string, configuration: Configuration);
    /**
     * @description enable impersonation by calling this prior to any of the other methods in this service
     *
     */
    As(): this;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    Delete(specID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<any>;
    Delete(specID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<any>>;
    Delete(specID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<any>>;
    /**
     *
     *
     * @param spec
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    Create<SpecXp = any, SpecOptionXp = any>(spec: Spec, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Spec<SpecXp, SpecOptionXp>>;
    Create<SpecXp = any, SpecOptionXp = any>(spec: Spec, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Spec>>;
    Create<SpecXp = any, SpecOptionXp = any>(spec: Spec, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Spec>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param specOption
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    CreateOption<SpecOptionXp = any>(specID: string, specOption: SpecOption, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<SpecOption<SpecOptionXp>>;
    CreateOption<SpecOptionXp = any>(specID: string, specOption: SpecOption, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<SpecOption>>;
    CreateOption<SpecOptionXp = any>(specID: string, specOption: SpecOption, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<SpecOption>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param optionID ID of the option.
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    DeleteOption(specID: string, optionID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<any>;
    DeleteOption(specID: string, optionID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<any>>;
    DeleteOption(specID: string, optionID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<any>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param productID ID of the product.
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    DeleteProductAssignment(specID: string, productID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<any>;
    DeleteProductAssignment(specID: string, productID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<any>>;
    DeleteProductAssignment(specID: string, productID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<any>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    Get<SpecXp = any, SpecOptionXp = any>(specID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Spec<SpecXp, SpecOptionXp>>;
    Get<SpecXp = any, SpecOptionXp = any>(specID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Spec>>;
    Get<SpecXp = any, SpecOptionXp = any>(specID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Spec>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param optionID ID of the option.
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    GetOption<SpecOptionXp = any>(specID: string, optionID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<SpecOption<SpecOptionXp>>;
    GetOption<SpecOptionXp = any>(specID: string, optionID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<SpecOption>>;
    GetOption<SpecOptionXp = any>(specID: string, optionID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<SpecOption>>;
    /**
     *
     *
     * @param options.search Word or phrase to search for.
     * @param options.searchOn Comma-delimited list of fields to search on.
     * @param options.sortBy Comma-delimited list of fields to sort by.
     * @param options.page Page of results to return. Default: 1
     * @param options.pageSize Number of results to return per page. Default: 20, max: 100.
     * @param options.filters Any additional key/value pairs passed in the query string are interpretted as filters. Valid keys are top-level properties of the returned model or &#39;xp.???&#39;
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    List<SpecXp = any, SpecOptionXp = any>(options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<ListSpec<SpecXp, SpecOptionXp>>;
    List<SpecXp = any, SpecOptionXp = any>(options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<ListSpec>>;
    List<SpecXp = any, SpecOptionXp = any>(options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<ListSpec>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param options.search Word or phrase to search for.
     * @param options.searchOn Comma-delimited list of fields to search on.
     * @param options.sortBy Comma-delimited list of fields to sort by.
     * @param options.page Page of results to return. Default: 1
     * @param options.pageSize Number of results to return per page. Default: 20, max: 100.
     * @param options.filters Any additional key/value pairs passed in the query string are interpretted as filters. Valid keys are top-level properties of the returned model or &#39;xp.???&#39;
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    ListOptions<SpecOptionXp = any>(specID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<ListSpecOption<SpecOptionXp>>;
    ListOptions<SpecOptionXp = any>(specID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<ListSpecOption>>;
    ListOptions<SpecOptionXp = any>(specID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<ListSpecOption>>;
    /**
     *
     *
     * @param options.search Word or phrase to search for.
     * @param options.searchOn Comma-delimited list of fields to search on.
     * @param options.sortBy Comma-delimited list of fields to sort by.
     * @param options.page Page of results to return. Default: 1
     * @param options.pageSize Number of results to return per page. Default: 20, max: 100.
     * @param options.filters Any additional key/value pairs passed in the query string are interpretted as filters. Valid keys are top-level properties of the returned model or &#39;xp.???&#39;
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    ListProductAssignments(options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<ListSpecProductAssignment>;
    ListProductAssignments(options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<ListSpecProductAssignment>>;
    ListProductAssignments(options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<ListSpecProductAssignment>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param partialSpec
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    Patch<SpecXp = any, SpecOptionXp = any>(specID: string, partialSpec: Spec, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Spec<SpecXp, SpecOptionXp>>;
    Patch<SpecXp = any, SpecOptionXp = any>(specID: string, partialSpec: Spec, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Spec>>;
    Patch<SpecXp = any, SpecOptionXp = any>(specID: string, partialSpec: Spec, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Spec>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param optionID ID of the option.
     * @param partialSpecOption
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    PatchOption<SpecOptionXp = any>(specID: string, optionID: string, partialSpecOption: SpecOption, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<SpecOption<SpecOptionXp>>;
    PatchOption<SpecOptionXp = any>(specID: string, optionID: string, partialSpecOption: SpecOption, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<SpecOption>>;
    PatchOption<SpecOptionXp = any>(specID: string, optionID: string, partialSpecOption: SpecOption, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<SpecOption>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param spec
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    Save<SpecXp = any, SpecOptionXp = any>(specID: string, spec: Spec, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Spec<SpecXp, SpecOptionXp>>;
    Save<SpecXp = any, SpecOptionXp = any>(specID: string, spec: Spec, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Spec>>;
    Save<SpecXp = any, SpecOptionXp = any>(specID: string, spec: Spec, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Spec>>;
    /**
     *
     *
     * @param specID ID of the spec.
     * @param optionID ID of the option.
     * @param specOption
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    SaveOption<SpecOptionXp = any>(specID: string, optionID: string, specOption: SpecOption, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<SpecOption<SpecOptionXp>>;
    SaveOption<SpecOptionXp = any>(specID: string, optionID: string, specOption: SpecOption, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<SpecOption>>;
    SaveOption<SpecOptionXp = any>(specID: string, optionID: string, specOption: SpecOption, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<SpecOption>>;
    /**
     *
     *
     * @param specProductAssignment
     * @param options.observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param options.reportProgress flag to report request and response progress.
     */
    SaveProductAssignment(specProductAssignment: SpecProductAssignment, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<any>;
    SaveProductAssignment(specProductAssignment: SpecProductAssignment, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<any>>;
    SaveProductAssignment(specProductAssignment: SpecProductAssignment, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<any>>;
}
