/*
 * 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
 */

package com.pullenti.unitext;

/**
 * Сервис поддержки технологии Unitext
 * 
 */
public class UnitextService {

    /**
     * Текущая версия
     */
    public static String VERSION = "4.33";

    /**
     * Дата выхода версии
     */
    public static String VERSIONDATE = "2026.02.06";

    /**
     * Создать документ из файла или байтового потока. 
     * ВНИМАНИЕ! Функция всегда возвращает экземпляр UnitextDocument и не выбрасывает Exceptions, 
     * а ошибки оформляются в свойстве ErrorMessage;
     * @param fileName имя файла (может быть null)
     * @param fileContent содержимое файла (если null, то fileName есть имя файла в локальной файловой системе)
     * @param pars дополнительные параметры выделения (может быть null)
     * @return экземпляр документа
     * 
     */
    public static UnitextDocument createDocument(String fileName, byte[] fileContent, CreateDocumentParam pars) throws Exception, java.io.FileNotFoundException, java.io.IOException {
        if (pars == null) 
            pars = new CreateDocumentParam();
        UnitextDocument doc = com.pullenti.unitext.internal.uni.UnitextHelper.create(fileName, fileContent, pars);
        boolean opt = false;
        if (pars.correctParams != null) {
            if (doc.correct(pars.correctParams)) 
                opt = true;
        }
        else if (doc.sourceFormat == FileFormat.TXT || com.pullenti.util.FileFormatsHelper.getFormatClass(doc.sourceFormat) == FileFormatClass.PAGELAYOUT) {
            com.pullenti.unitext.internal.uni.UnitextCorrHelper.removePageBreakNumeration(doc);
            com.pullenti.unitext.internal.uni.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" + java.util.UUID.randomUUID();
        return doc;
    }

    /**
     * Создать документ из чистого текста, при этом позиции всех элементов 
     * будут относительно именно его! GetPlaintext будет не генерировать, а возвращает именно его!
     * @param text текст
     * @return экземпляр документа
     * 
     */
    public static UnitextDocument createDocumentFromText(String text) {
        if (com.pullenti.unisharp.Utils.isNullOrEmpty(text)) 
            return null;
        UnitextDocument doc = com.pullenti.unitext.internal.uni.UnitextHelper.createDocFromText(text);
        doc.refreshParents();
        return doc;
    }

    // Реализация извне дополнительного функцонала
    public static IUnitextExtension EXTENSION;

    public UnitextService() {
    }
    
    static {
        EXTENSION = null;
    }
}
