/**
 * 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 { ListProduct } from '../model/listProduct';
import { ListProductAssignment } from '../model/listProductAssignment';
import { ListSpec } from '../model/listSpec';
import { ListSupplier } from '../model/listSupplier';
import { ListVariant } from '../model/listVariant';
import { Product } from '../model/product';
import { ProductAssignment } from '../model/productAssignment';
import { Variant } from '../model/variant';
import { Configuration } from '../configuration';
export declare class OcProductService {
    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 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.
     */
    Delete(productID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<any>;
    Delete(productID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<any>>;
    Delete(productID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<any>>;
    /**
     *
     *
     * @param 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.
     */
    Create<ProductXp = any>(product: Product, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Product<ProductXp>>;
    Create<ProductXp = any>(product: Product, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Product>>;
    Create<ProductXp = any>(product: Product, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Product>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @param buyerID ID of the buyer.
     * @param options.userID ID of the user.
     * @param options.userGroupID ID of the user group.
     * @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.
     */
    DeleteAssignment(productID: string, buyerID: string, options?: {
        userID?: string;
        userGroupID?: string;
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<any>;
    DeleteAssignment(productID: string, buyerID: string, options?: {
        userID?: string;
        userGroupID?: string;
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<any>>;
    DeleteAssignment(productID: string, buyerID: string, options?: {
        userID?: string;
        userGroupID?: string;
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<any>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @param options.overwriteExisting Overwrite existing 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.
     */
    GenerateVariants<ProductXp = any>(productID: string, options?: {
        overwriteExisting?: boolean;
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Product<ProductXp>>;
    GenerateVariants<ProductXp = any>(productID: string, options?: {
        overwriteExisting?: boolean;
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Product>>;
    GenerateVariants<ProductXp = any>(productID: string, options?: {
        overwriteExisting?: boolean;
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Product>>;
    /**
     *
     *
     * @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.
     */
    Get<ProductXp = any>(productID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Product<ProductXp>>;
    Get<ProductXp = any>(productID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Product>>;
    Get<ProductXp = any>(productID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Product>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @param variantID ID of the variant.
     * @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.
     */
    GetVariant<VariantXp = any>(productID: string, variantID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Variant<VariantXp>>;
    GetVariant<VariantXp = any>(productID: string, variantID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Variant>>;
    GetVariant<VariantXp = any>(productID: string, variantID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Variant>>;
    /**
     *
     *
     * @param options.catalogID ID of the catalog.
     * @param options.categoryID ID of the category.
     * @param options.supplierID ID of the supplier.
     * @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<ProductXp = any, ListFacetXp = any>(options?: {
        catalogID?: string;
        categoryID?: string;
        supplierID?: string;
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<ListProduct<ProductXp, ListFacetXp>>;
    List<ProductXp = any, ListFacetXp = any>(options?: {
        catalogID?: string;
        categoryID?: string;
        supplierID?: string;
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<ListProduct>>;
    List<ProductXp = any, ListFacetXp = any>(options?: {
        catalogID?: string;
        categoryID?: string;
        supplierID?: string;
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<ListProduct>>;
    /**
     *
     *
     * @param options.productID ID of the product.
     * @param options.priceScheduleID ID of the price schedule.
     * @param options.buyerID ID of the buyer.
     * @param options.userID ID of the user.
     * @param options.userGroupID ID of the user group.
     * @param options.level Level of the product assignment. Possible values: User, Group, Company.
     * @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.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.
     */
    ListAssignments(options?: {
        productID?: string;
        priceScheduleID?: string;
        buyerID?: string;
        userID?: string;
        userGroupID?: string;
        level?: string;
        page?: number;
        pageSize?: number;
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<ListProductAssignment>;
    ListAssignments(options?: {
        productID?: string;
        priceScheduleID?: string;
        buyerID?: string;
        userID?: string;
        userGroupID?: string;
        level?: string;
        page?: number;
        pageSize?: number;
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<ListProductAssignment>>;
    ListAssignments(options?: {
        productID?: string;
        priceScheduleID?: string;
        buyerID?: string;
        userID?: string;
        userGroupID?: string;
        level?: string;
        page?: number;
        pageSize?: number;
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<ListProductAssignment>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @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.
     */
    ListSpecs<SpecXp = any, SpecOptionXp = any>(productID: string, 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>>;
    ListSpecs<SpecXp = any, SpecOptionXp = any>(productID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<ListSpec>>;
    ListSpecs<SpecXp = any, SpecOptionXp = any>(productID: string, 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 productID ID of the product.
     * @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.
     */
    ListSuppliers<SupplierXp = any>(productID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<ListSupplier<SupplierXp>>;
    ListSuppliers<SupplierXp = any>(productID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<ListSupplier>>;
    ListSuppliers<SupplierXp = any>(productID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<ListSupplier>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @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.
     */
    ListVariants<VariantXp = any>(productID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<ListVariant<VariantXp>>;
    ListVariants<VariantXp = any>(productID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<ListVariant>>;
    ListVariants<VariantXp = any>(productID: string, options?: {
        search?: string;
        searchOn?: string;
        sortBy?: string;
        page?: number;
        pageSize?: number;
        filters?: {
            [key: string]: string | Array<string>;
        };
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<ListVariant>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @param partialProduct
     * @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<ProductXp = any>(productID: string, partialProduct: Product, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Product<ProductXp>>;
    Patch<ProductXp = any>(productID: string, partialProduct: Product, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Product>>;
    Patch<ProductXp = any>(productID: string, partialProduct: Product, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Product>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @param variantID ID of the variant.
     * @param partialVariant
     * @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.
     */
    PatchVariant<VariantXp = any>(productID: string, variantID: string, partialVariant: Variant, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Variant<VariantXp>>;
    PatchVariant<VariantXp = any>(productID: string, variantID: string, partialVariant: Variant, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Variant>>;
    PatchVariant<VariantXp = any>(productID: string, variantID: string, partialVariant: Variant, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Variant>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @param supplierID ID of the supplier.
     * @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.
     */
    RemoveSupplier(productID: string, supplierID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<any>;
    RemoveSupplier(productID: string, supplierID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<any>>;
    RemoveSupplier(productID: string, supplierID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<any>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @param 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.
     */
    Save<ProductXp = any>(productID: string, product: Product, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Product<ProductXp>>;
    Save<ProductXp = any>(productID: string, product: Product, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Product>>;
    Save<ProductXp = any>(productID: string, product: Product, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Product>>;
    /**
     *
     *
     * @param productAssignment
     * @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.
     */
    SaveAssignment(productAssignment: ProductAssignment, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<any>;
    SaveAssignment(productAssignment: ProductAssignment, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<any>>;
    SaveAssignment(productAssignment: ProductAssignment, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<any>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @param supplierID ID of the supplier.
     * @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.
     */
    SaveSupplier(productID: string, supplierID: string, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<any>;
    SaveSupplier(productID: string, supplierID: string, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<any>>;
    SaveSupplier(productID: string, supplierID: string, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<any>>;
    /**
     *
     *
     * @param productID ID of the product.
     * @param variantID ID of the variant.
     * @param variant
     * @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.
     */
    SaveVariant<VariantXp = any>(productID: string, variantID: string, variant: Variant, options?: {
        observe?: 'body';
        reportProgress?: boolean;
    }): Observable<Variant<VariantXp>>;
    SaveVariant<VariantXp = any>(productID: string, variantID: string, variant: Variant, options?: {
        observe?: 'response';
        reportProgress?: boolean;
    }): Observable<HttpResponse<Variant>>;
    SaveVariant<VariantXp = any>(productID: string, variantID: string, variant: Variant, options?: {
        observe?: 'events';
        reportProgress?: boolean;
    }): Observable<HttpEvent<Variant>>;
}
