/// <reference types="node" />
import { Action } from './actions/Action';
import { LinkedListModified } from './LinqList';
import { Page } from './Page';
import { State } from './State';
import { IDocumentPageResponse, IDocumentTableResponse } from './response/IDocument.response';
import { DataSet } from '../../data/Data.module';
import EventEmitter from 'events';
interface DocumentJSON {
    id: string;
    name: string;
}
/**
 * Класс для документа
 */
export declare class Document {
    id: string;
    name?: string;
    /**
     * Data set
     */
    private _ds;
    /**s
     * Получаем ссылку на DataSet
     */
    get ds(): DataSet;
    /**
     * Список пользователей которые редактируют документ
     */
    usersView: any[];
    /**
     * Событие изменения документа
     */
    $eventChangeState: EventEmitter;
    /**
     * Список страниц
     */
    pages: LinkedListModified<Page>;
    constructor(id?: string, name?: string);
    /**
     * Добавить страницу на документ
     * @param pageResponse Страница
     */
    addPage(pageResponse: IDocumentPageResponse[]): void;
    /**
     * Добавление таблиц в датасет
     * @param resp Таблицы
     */
    addTables(resp: IDocumentTableResponse[]): void;
    /**
     * Получить ID активной станицы
     */
    get pageSelectId(): string;
    /**
     * Активная страница
     */
    get pageSelect(): Page;
    /**
     * Сделать активную первую страницу
     */
    firstPageActive(): void;
    /**
     * Сделать страницу активной по id
     * @param idPage ID страницы
     */
    makePageActive(id: string): void;
    /**
     * Получить страницу по ID
     * @param id ID Страницы
     * @returns Страница
     */
    getPageById(id: string): Page | undefined;
    /**
     * Получить страницу по названию
     * @param name Название страницы
     * @returns Страница
     */
    getPageByName(name: string): Page | undefined;
    /**
     * Получить новое имя для страницы
     * @returns Имя страницы
     */
    generatePageName(name: string): string;
    private _generatePageName;
    /**
     * Сделать все страницы неактивными
     */
    makeAllPagesInactive(): void;
    /**
     * Предыдущая страница
     * @param idCurPage id страницы
     * @returns страница
     */
    prevPage(idCurPage: string): Page | null;
    /**
     * Следующая страница
     * @param idCurPage id страницы
     * @returns страница
     */
    nextPage(idCurPage: string): Page | null;
    /**
     * Получить состояния документа/страницы/виджета от типа действия
     * @param action Тип действия
     * @returns Состояние документа/страницы/виджета
     */
    stateSelection(action: Action<any>): State | null;
    static fromJSON(json: string): Document;
    toJSON(): DocumentJSON;
    private _isWidget;
    private _isPage;
    private _isDocument;
    private _findStatePageById;
    private _findStateWidgetById;
}
export {};
