import { WorkItemType, WorkItemTypeUI, WorkItemTypeMapper } from './work-item-type';
import { AreaModel, AreaUI, AreaMapper } from './area.model';
import { Comment, CommentUI, CommentMapper } from './comment';
import { Link } from './link';
import { IterationModel, IterationUI, IterationMapper } from './iteration.model';
import { LabelModel, LabelUI, LabelMapper } from './label.model';
import { UserUI, UserMapper, UserService } from './user';
import { modelService, Mapper, MapTree } from './common.model';
export declare class WorkItem extends modelService {
    hasChildren?: boolean;
    attributes: object;
    number?: number;
    relationships?: WorkItemRelations;
    relationalData?: RelationalData;
    links?: {
        self: string;
    };
}
export declare class WorkItemRelations {
    area?: {
        data?: AreaModel;
    };
    assignees?: {
        data?: UserService[];
    };
    labels?: {
        data?: LabelModel[];
        links?: {
            related?: string;
        };
    };
    baseType?: {
        data: WorkItemType;
    };
    parent?: {
        data?: WorkItem;
    };
    children?: {
        links: {
            related: string;
        };
        meta: {
            hasChildren: boolean;
        };
    };
    comments?: {
        data?: Comment[];
        links: {
            self?: string;
            related?: string;
        };
        meta?: {
            totalCount?: number;
        };
    };
    creator?: {
        data: UserService;
    };
    iteration?: {
        data?: IterationModel;
    };
    codebase?: {
        links: {
            meta: {
                edit: string;
            };
        };
    };
    workItemLinks?: {
        links?: {
            related?: string;
        };
    };
}
export declare class RelationalData {
    area?: AreaModel;
    creator?: UserService;
    comments?: Comment[];
    parent?: WorkItem;
    assignees?: UserService[];
    labels?: LabelModel[];
    linkDicts?: LinkDict[];
    iteration?: IterationModel;
    totalLinkCount?: number;
    wiType?: WorkItemType;
}
export declare class LinkDict {
    linkName: any;
    links: Link[];
    count: number;
}
export interface WorkItemService extends WorkItem {
}
export interface WorkItemUI {
    id: string;
    title: string;
    number: string | number;
    createdAt: string;
    updatedAt: string;
    state: string;
    descriptionMarkup: string;
    descriptionRendered: string;
    description: string;
    version: number;
    order: number;
    area: AreaUI;
    iteration: IterationUI;
    assignees: UserUI[];
    creator: UserUI;
    type: WorkItemTypeUI;
    labels: LabelUI[];
    comments: CommentUI[];
    children: WorkItemUI[];
    commentLink: string;
    childrenLink: string;
    hasChildren: boolean;
    parentID: string;
    link: string;
    WILinkUrl: string;
    treeStatus: 'collapsed' | 'expanded' | 'disabled' | 'loading';
    childrenLoaded: boolean;
    bold: boolean;
    createId: number;
}
export declare class WorkItemMapper implements Mapper<WorkItemService, WorkItemUI> {
    itMapper: IterationMapper;
    wiTypeMapper: WorkItemTypeMapper;
    areaMapper: AreaMapper;
    userMapper: UserMapper;
    labelMapper: LabelMapper;
    commentMapper: CommentMapper;
    serviceToUiMapTree: MapTree;
    uiToServiceMapTree: MapTree;
    toUIModel(arg: WorkItemService): WorkItemUI;
    toServiceModel(arg: WorkItemUI): WorkItemService;
    cleanModel(arg: WorkItemService, keysToRemove?: string[]): any;
}
export declare class WorkItemResolver {
    private workItem;
    constructor(workItem: WorkItemUI);
    resolveArea(areas: AreaUI[]): void;
    resolveIteration(iterations: IterationUI[]): void;
    resolveAssignees(users: UserUI[]): void;
    resolveCreator(users: UserUI[]): void;
    resolveType(types: WorkItemTypeUI[]): void;
    resolveWiLabels(labels: LabelUI[]): void;
    getWorkItem(): WorkItemUI;
}
