'use strict';
import {createRowDomain} from '../templates/domains-template.js';
import { logoutKeycloak, getToken } from './script.js';

class App {
    constructor(myDomains, requestsToDomain) {
        // this.myDomains = myDomains;
        this.requestsToDomain = requestsToDomain;
        this.showAllDomains(myDomains);
        const buttonLogout = document.getElementById('button-logout');
        buttonLogout.addEventListener('click', async (event) => {
            event.preventDefault();
            await logoutKeycloak();
        });
    }

    showAllDomains(domainsToShow) {
        const addHere = document.getElementById('table-row-domains');
        for(const d of domainsToShow) {
            const tr = document.createElement('tr');
            tr.innerHTML = createRowDomain(d);;
            console.log(d);
            console.log(tr);
            const plusRow = addHere.lastElementChild;
            addHere.insertBefore(tr, plusRow);
            if(d.admin) {
                const toggle = tr.querySelector('.toggle-button');
                this.statoDomainToggle(d, toggle, this.requestsToDomain);
                const deleteDomain = tr.querySelector('.fa-trash');
                deleteDomain.addEventListener('click', async () => {
                    const resultDelete = await this.requestsToDomain.deleteDomain(d);
                    if(resultDelete) {
                        addHere.removeChild(tr);
                    }
                    else {
                        throw new Error('Impossibile eliminare il dominio, provare piu\' tardi');
                    }
                });
            }
        }
    }


    statoDomainToggle(domain, toggle, requestsToDomain) {
        toggle.addEventListener('click', async (event) => {
            event.preventDefault();
            const token = getToken();
            const stop = toggle.classList.contains('active');
            if(stop) {
                // toggle attiva. Se clicco richiedo che il dominio sia fermato
                const resultStop = await requestsToDomain.stopDomain(domain);
                if(resultStop) {
                    toggle.classList.remove('active');
                }
                else {
                    throw new Error('Impossibile fermare il dominio, provare piu\' tardi');
                }
            }
            else {
                const resultStart = await requestsToDomain.startDomain(domain);
                if(resultStart) {
                    toggle.classList.add('active');
                }
                else {
                    throw new Error('Impossibile far partire il dominio, provare piu\' tardi');
                }
            } 
        });
    }

}

export default App;