'use strict';
import {getToken} from "./script.js";
import Domain from "./domain.js";

class RequestToDomain {

    constructor() {
    }


    /**
    * Funzione per ottenenere dal domain manager tutte le informazioni 
    * sui domini dell'utente che ha effettuato il login
    */
    async getMyDomains() {
        const responseDomain = await fetch('http://localhost:3001/secured/domains', {  // DA FARE: controllare che l'uri che ho specificato qui coincida con quello specificato dal domain manager
            method: 'GET', 
            headers: {
                'Authorization': `Bearer ${await getToken()}`
            }
        }) ;
        const domainsJson = await response.json();
        if(response.ok) {
            const domainsArray = domainsJson.response;
            const myDomains = domainsArray.map((d) => {
                Domain.from(d)
            });
            return myDomains;
        } 
        else
            throw domainsJson;
    }


    /**
     * Effettua la richiesta per creare un nuovo dominio.
     */
    async createNewDomain() {

    }


    /**
     * Effettua la richiesta al domain manager per far partire un dominio.
     * @param {*} d dominio che si vuole far partire.
     * @returns true se il dominio è stato fatto partire, 
     * false altrimenti.
     */
    async startDomain(d) {
        const response = await fetch('http://localhost:3001/start', {
            method: 'POST',
            headers: {
                'Authorization': `Bearer ${await getToken()}`
            },
            body: JSON.stringify({domain: d.nome})
        });
        if(response.ok) {
            return true;
        }
        else {
            return false;
        }
    }


    /**
     * Effettua la richiesta al domain manager per fermare un dominio.
     * @param {*} d dominio che si vuole fermare.
     * @returns true se il dominio è stato fermato, 
     * false altrimenti.
     */
    async stopDomain(d) {
        const response = await fetch('http://localhost:3001/stop', {
            method: 'POST',
            headers: {
                'Authorization': `Bearer ${await getToken()}`
            },
            body: JSON.stringify({domain: d.nome})
        });
        if(response.ok) {
            return true;
        }
        else {
            return false;
        }
    }


    /**
     * Effettua la richiesta al domain manager per cancellare un dominio.
     * @param {*} d dominio che si vuole cancellare.
     * @returns true se la cancellazione è andata a buon fine, 
     * false altrimenti.
     */
    async deleteDomain(d) {
        const response = await fetch('http://localhost:3001/delete', {
                        method: 'POST',
                        headers: {
                            'Authorization': `Bearer ${await getToken()}`
                        },
                        body: JSON.stringify({domain: d.nome})
                    });
        if(response.ok) {
            return true;
        }
        else {
            return false;
        } 
    }
}

export default RequestToDomain;