import { Observable } from 'rxjs';
import { Logger } from 'ngx-base';
import { Spaces } from 'ngx-fabric8-wit';
import { User, UserService } from 'ngx-login-client';
import { Comment } from '../models/comment';
import { AreaModel } from '../models/area.model';
import { LinkTypeService } from '../models/link-type';
import { WorkItem } from '../models/work-item';
import { WorkItemType } from './../models/work-item-type';
import { HttpBackendClient, HttpClientService } from './../shared/http-module/http.service';
import { AreaService } from './area.service';
export declare class WorkItemService {
    private httpClientService;
    private httpBackendClient;
    private logger;
    private areaService;
    private userService;
    private spaces;
    private baseApiUrl;
    private workItemUrl;
    private renderUrl;
    workItemTypes: WorkItemType[];
    _currentSpace: any;
    constructor(httpClientService: HttpClientService, httpBackendClient: HttpBackendClient, logger: Logger, areaService: AreaService, userService: UserService, spaces: Spaces, baseApiUrl: string);
    private notifyError;
    private handleError;
    /**
     * Takes a URL to the list of child
     * work items of a particular work item
     * and performs a get operation for all the child items
     * @param url url to the child work items
     */
    getChildren(url: string): Observable<WorkItem[]>;
    /**
     * Usage: Performs a get operation on work items
     *
     * @param pageSize number of work items to be fetched
     * @param filters filters to the work items
     */
    getWorkItems(pageSize: number, filters: object): Observable<{
        workItems: WorkItem[];
        nextLink: string;
        totalCount?: number | null;
        included?: WorkItem[] | null;
        ancestorIDs?: Array<string>;
    }>;
    /**
     * This function is called from next page onwards in the scroll
     * It does pretty much same as the getWorkItems function
     */
    getMoreWorkItems(url: any): Observable<{
        workItems: WorkItem[];
        nextLink: string | null;
        included?: WorkItem[] | null;
        ancestorIDs?: Array<string>;
    }>;
    /**
     * Usage: This method gives a single work item by display number.
     *
     * @param id : string - number
     * @param owner : string
     * @param space : string
     */
    getWorkItemByNumber(id: string | number, owner?: string, space?: string): Observable<WorkItem>;
    /**
     * Usage: This method is to get the events for a work item
     * This method is only called when a single item is fetched for the
     * details page.
     *
     * @param: WorkItem - wItem
     */
    getEvents(url: string): Observable<any>;
    /**
     * Usage: This method is to resolve the comments for a work item
     * This method is only called when a single item is fetched for the
     * details page.
     *
     * @param: WorkItem - wItem
     */
    resolveComments(url: string): Observable<any>;
    /**
     * Usage: This method is to resolve the linked items for a work item
     * This method is only called when a single item is fetched for the
     * details page.
     *
     * @param: WorkItem - wItem
     */
    resolveLinks(url: string): Observable<any>;
    /**
     * Usage: fetch all the work item types
     *
     * @param workItemTypeUrl : string
     */
    getWorkItemTypes(workItemTypeUrl: string): Observable<any[]>;
    /**
     * Usage: This method deletes an work item
     *  @param workItem WorkItem
     */
    delete(workItem: WorkItem): Observable<any>;
    /**
      * Usage: This method create a new item
      *
      * @param: url
      * @param: WorkItem - workItem (Item to be created)
    */
    create(url: string, workItem: WorkItem): Observable<WorkItem>;
    /**
     * Usage: This method update an existing item
     * updates the item in the big list
     * resolve the users for the item
     *
     * @param: WorkItem - workItem (Item to be created)
     */
    update(workItem: WorkItem): Observable<WorkItem>;
    /**
     * Usage: This method create a comment for a workItem
     *
     * @param: string - id (Work Item ID)
     * @param: Comment
     */
    createComment(url: string, comment: Comment): Observable<Comment>;
    /**
     * Usage: to update comment pass in with the ID
     *
     * @param comment Comment type
     */
    updateComment(comment: Comment): Observable<Comment>;
    /**
     * Usage: To delete a comment
     * @param comment Comment
     */
    deleteComment(comment: Comment): Observable<any>;
    /**
     * Usage: This function fetches all the work item link types
     * Store it in an instance variable
     *
     * @return Promise of LinkType[]
     */
    getAllLinkTypes(url: string): Observable<LinkTypeService[]>;
    /**
     * Usage: Makes an API call to create a link
     * Recieves the new link response
     * Resolves and add the new link to the workItem
     *
     * @param link: Link - The new link object for request params
     * @returns Promise<Link>
     */
    createLink(url: string, link: Object): Observable<any>;
    /**
     * Usage: Makes an API call to delete a link
     * Removes the new link to the workItem
     *
     * @param link: Link
     * @returns Promise<void>
     */
    deleteLink(url: string): Observable<void>;
    searchLinkWorkItem(term: string, spaceId: string): Observable<WorkItem[]>;
    /**
     * Usage: Make a API call to save
     * the order of work item.
     *
     * @param spaceLink: string
     * @param workItemId: string
     * @param prevWiId: string
     * @param direction: string
     */
    reOrderWorkItem(spaceLink: string, workItem: WorkItem, prevWiId: string | null, direction: string): Observable<WorkItem>;
    /**
     * Usage: This function is used to render markdown text in html
     * @param markDownText string
     */
    renderMarkDown(markDownText: string): Observable<any>;
    /**
     * All the soon to be deprecated method stays behind this line
     */
    /**
     * @deprecated Planner :: this property will be deprecated soon
     */
    private userIdMap;
    /**
     * @deprecated Planner :: this function will be deprecated soon
     * @function buildUserIdMap builds a ID-User map to dynamically access list of users
     * This method takes the locally saved list of users from User Service
     * Before coming to this method we fetch the list of users using router resolver
     * in detail and list component.
     */
    buildUserIdMap(): void;
    /**
     * @deprecated Planner :: we save all the types in the store in a key - value pair.
     * Therefore, this function is not needed anymore.
     *
     * Usage: This method is to fetch the work item types by ID
     */
    getWorkItemTypesById(id: string): Observable<WorkItemType>;
    /**
     * @deprecated Planner :: this method will be deprecated soon
     * Resolving relations is moved to querries
     *
     * Usage: Resolve the wi type for a WorkItem
     */
    resolveType(workItem: WorkItem): void;
    /**
     * @deprecated Planner :: this method will be deprecated soon
     * Usage: Fetch an area by it's ID from the areas list
     */
    getAreaById(areaId: string): Observable<AreaModel>;
    /**
     * @deprecated Planner :: this method will be deprecated soon
     * Resolving relations is moved to querries
     *
     * Usage: To resolve the areas in eact WorkItem
     * For now it resolves assignne and creator
     */
    resolveAreaForWorkItem(workItem: WorkItem): void;
    /**
     * @deprecated Planner ::
     * Usage: Fetch an use by it's ID from the User-ID map
     */
    getUserById(userId: string): User;
    /**
     * @deprecated Planner :: this method will be deprecated soon
     * Resolving relations is moved to querries
     * Usage: Resolve the creator for a WorkItem
     */
    resolveCreator(workItem: WorkItem): void;
}
