//##################################################################################################
// Die Klasse DemoRecipeManager veranschaulicht die Verwendung der RecipeManagerAPI
// 
// copyright by Sigmatek GmbH & CoKG
//##################################################################################################



class RecipeManager {

    static initRecipeManager() {
        if (window.sigApi !== undefined) {
            const fm = new RecipeManager(window.sigApi);
        } else {
            // ist sigApi noch nicht geladen, als EventListener fuer 'SigApiReady' registrieren
            window.addEventListener('SigApiReady', () => {
                const fm = new RecipeManager(window.sigApi);
            });
        }
    }

    constructor(api) {
        this.events = null;
        this.eventMediator = null;
        this.recipeAPI = null;
        this._initAPIs(api);
        this._registerEvents();
    }

    //##################################################################################################
    // Alle benoetigten APIs zuweisen
    //##################################################################################################
    _initAPIs(api) {
        if ((api !== null) && (api !== undefined)) {
            if (api.recipeManager !== undefined) {
                this.recipeAPI = api.recipeManager;
            }
            if (api.eventMediator !== undefined) {
                this.eventMediator = api.eventMediator;
            }
            if (api.events !== undefined) {
                this.events = api.events;
            }
        }
    }

    //##################################################################################################
    // Fuer alle benutzerdefinierten Events registrieren
    //##################################################################################################
    _registerEvents() {
        if ((this.eventMediator !== null) && (this.eventMediator !== undefined) && (this.events !== null) && (this.events !== undefined)) {
            this.eventMediator.subscribe(this.events.getUserDefinedInternalEvent('evtGetUID'), () => {
                this.onGetUID();
            });
            this.eventMediator.subscribe(this.events.getUserDefinedInternalEvent('evtRecipeSave'), () => {
                this.onRecipeSave();
            });
            this.eventMediator.subscribe(this.events.getUserDefinedInternalEvent('myRecipeLoad'), () => {
                this.onRecipeLoad();
            });
        }
    }



    //##################################################################################################
    // Mit der Funktion getUID() wird eine fuer diese Anwendung eindeutige Nummer erzeugt. 
    // Diese UID wird fuer jeden Methodenaufruf im ApiRecipeManager benoetigt, um ein resolve() bzw. reject() 
    // dem jeweiligen Methodenaufruf zuordnen zu koennen.
    //##################################################################################################
    onGetUID() {
        if (this.recipeAPI !== null) {
            const uid = this.recipeAPI.getUID();
            console.log('UID=' + uid);
            return uid;
        }
    }


    //##################################################################################################
    // Liest eine Rezeptdatei ein
    //##################################################################################################
    onRecipeLoad() {
        console.log('onRecipeLoad()');
        const dpne = 'c:\\temp\\rezept.txt';
        const filter1 = 0;
        const filter2 = 0;
        if (this.recipeAPI !== null) {sigInput
            const ret = this.recipeAPI.load(dpne, filter1, filter2);
            ret.then(function (resolve) {
                console.log('load() UID=' + resolve.uid + ' dpne=' + resolve.dpne);
            },
                function (reject) {
                    console.log('load() UID=' + reject.uid + ' status=' + reject.status + ' Error=' + reject.errortxt);
                });
        }
    }


    //##################################################################################################
    // Speichert eine Rezeptdatei
    //##################################################################################################
    onRecipeSave() {
        console.log('onRecipeSave()');
        const dpne = 'c:\\temp\\rezept.txt';
        const headertext = 'header zeile1\nzeile2\nund zeile3\n\n'
        const filter1 = 0;
        const filter2 = 0;
        if (this.recipeAPI !== null) {
            const ret = this.recipeAPI.save(dpne, headertext, filter1, filter2);
            ret.then(function (resolve) {
                console.log('save() UID=' + resolve.uid + ' dpne=' + resolve.dpne);
            },
                function (reject) {
                    console.log('save() UID=' + reject.uid + ' status=' + reject.status + ' Error=' + reject.errortxt);
                });
        }

    }



}

//##################################################################################################
// Instanzierung von DemoRecipeManager
//##################################################################################################
RecipeManager.initRecipeManager();