/*
 * SDK Pullenti Unitext, version 4.33, fabruary 2026. Copyright (c) 2013-2026, Pullenti. All rights reserved. 
 * Non-Commercial Freeware and Commercial Software. 
 * This class is generated using the converter UniSharping (www.unisharping.ru) from Pullenti C# project. 
 * The latest version of the code is available on the site www.pullenti.ru
 */

const Utils = require("./../unisharp/Utils");

const FileFormatClass = require("./FileFormatClass");
const FileFormat = require("./FileFormat");
const CreateDocumentParam = require("./CreateDocumentParam");
const FileFormatsHelper = require("./../util/FileFormatsHelper");

/**
 * Сервис поддержки технологии Unitext
 * 
 */
class UnitextService {
    
    /**
     * Создать документ из файла или байтового потока. 
     * ВНИМАНИЕ! Функция всегда возвращает экземпляр UnitextDocument и не выбрасывает Exceptions, 
     * а ошибки оформляются в свойстве ErrorMessage;
     * @param fileName имя файла (может быть null)
     * @param fileContent содержимое файла (если null, то fileName есть имя файла в локальной файловой системе)
     * @param pars дополнительные параметры выделения (может быть null)
     * @return экземпляр документа
     * 
     */
    static createDocument(fileName, fileContent = null, pars = null) {
        const UnitextCorrHelper = require("./internal/uni/UnitextCorrHelper");
        const UnitextHelper = require("./internal/uni/UnitextHelper");
        if (pars === null) 
            pars = new CreateDocumentParam();
        let doc = UnitextHelper.create(fileName, fileContent, pars);
        let opt = false;
        if (pars.correctParams !== null) {
            if (doc.correct(pars.correctParams)) 
                opt = true;
        }
        else if (doc.sourceFormat === FileFormat.TXT || FileFormatsHelper.getFormatClass(doc.sourceFormat) === FileFormatClass.PAGELAYOUT) {
            UnitextCorrHelper.removePageBreakNumeration(doc);
            UnitextCorrHelper.removeFalseNewLines(doc, true, (pars === null ? null : pars.correctParams));
        }
        if (opt) 
            doc.optimize(false, null);
        if (pars.dontGenerateItemsId) 
            doc.refreshParents();
        else 
            doc.generateIds();
        if (doc.sourceFormat === FileFormat.UNKNOWN) 
            doc.sourceFormat = FileFormat.TXT;
        if (doc.id === null) 
            doc.id = "doc" + Utils.createUUID().toString();
        return doc;
    }
    
    /**
     * Создать документ из чистого текста, при этом позиции всех элементов 
     * будут относительно именно его! GetPlaintext будет не генерировать, а возвращает именно его!
     * @param text текст
     * @return экземпляр документа
     * 
     */
    static createDocumentFromText(text) {
        const UnitextHelper = require("./internal/uni/UnitextHelper");
        if (Utils.isNullOrEmpty(text)) 
            return null;
        let doc = UnitextHelper.createDocFromText(text);
        doc.refreshParents();
        return doc;
    }
    
    static static_constructor() {
        UnitextService.VERSION = "4.33";
        UnitextService.VERSION_DATE = "2026.02.06";
        UnitextService.EXTENSION = null;
    }
}


UnitextService.static_constructor();

module.exports = UnitextService