/*
 * 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 fs = require('fs');
const Utils = require("./../pullenti/unisharp/Utils");
const Stream = require("./../pullenti/unisharp/Stream");
const FileStream = require("./../pullenti/unisharp/FileStream");
const XmlWriterSettings = require("./../pullenti/unisharp/XmlWriterSettings");
const XmlWriter = require("./../pullenti/unisharp/XmlWriter");

const GetHtmlParam = require("./../pullenti/unitext/GetHtmlParam");
const DemoPropertiesResources = require("./properties/DemoPropertiesResources");
const UnitextService = require("./../pullenti/unitext/UnitextService");

// Демонстрация получения представления Unitext из файлов разных форматов, и генерация
// из этого представления форматов Plaintext и Html.
class Program {
    
    static main(args) {
        process.stdout.write("Unitext SDK version " + UnitextService.VERSION + " (" + UnitextService.VERSION_DATE + ")" + "\r\n");
        // Перебираем примеры файлов разных форматов из встроенных ресурсов.
        // Содержимое там примерно одинаковое, и результат будет примерно одинаковым.
        
        let resNames = DemoPropertiesResources.getNames();
        for (const resnam of resNames) {
            process.stdout.write("Resource " + resnam + ": ");
            let content = [ ];
            let stream = DemoPropertiesResources.getStream(resnam); 
            // получаем байтовый поток ресурса
            try {
                content = new Uint8Array(stream.length);
                stream.read(content, 0, content.length);
            }
            finally {
                stream.close();
            }
            process.stdout.write(content.length + " bytes ... ");
            // извлекли байтовый поток из ресурса, обрабатываем его
            let doc = UnitextService.createDocument(null, content, null);
            if (doc.errorMessage !== null) {
                // скорее всего, этот формат не поддерживается на данный момент
                process.stdout.write(" error, sorry: " + doc.errorMessage + " " + "\r\n");
                continue;
            }
            // восстанавливаем имя исходного файла, извлечённого из ресурсов
            doc.sourceFileName = resnam;
            for (let i = resnam.length - 7; i > 0; i--) {
                if (resnam[i] === '.') {
                    doc.sourceFileName = resnam.substring(i + 1);
                    break;
                }
            }
            let fs = new FileStream(doc.sourceFileName + ".xml", "w+", false); 
            // записываем результат в XML
            try {
                let xmlParams = new XmlWriterSettings();
                xmlParams.encoding = "UTF-8";
                xmlParams.indent = true;
                xmlParams.indentChars = "  ";
                let xml = XmlWriter.createStream(fs, xmlParams); 
                try {
                    xml.writeStartDocument();
                    doc.getXml(xml);
                    xml.writeEndDocument();
                }
                finally {
                    xml.close();
                }
            }
            finally {
                fs.close();
            }
            // получаем плоский текст
            let plainText = doc.getPlaintextString(null);
            if (plainText === null) 
                plainText = "Текст не выделен";
            Utils.writeAllBytes(doc.sourceFileName + ".txt", Utils.encodeString("UTF-8", plainText));
            // получаем html
            let htmlParams = new GetHtmlParam();
            htmlParams.outHtmlAndBodyTags = true;
            let html = doc.getHtmlString(htmlParams);
            Utils.writeAllBytes(doc.sourceFileName + ".html", Utils.encodeString("UTF-8", html));
            process.stdout.write(" format " + String(doc.sourceFormat) + ", save xml & text & html" + "\r\n");
        }
        process.stdout.write("Bye!" + "\r\n");
    }
}


module.exports = Program