class AmazonLink {

    constructor( url, proxy = `/wp-json/api/v1/proxy/` ) {

        this.url = url;

        this.platform = 'Amazon';
        this.program  = 'amazon';
        
        this.proxy = proxy;

        this.asin = this.getAsin();
    }


    // deprecated : da rimuovere quando viene effettuata 
    //              l'invocazione da linkFactory
    isValid() {
        return this.isLink() && this.asin != null;
    }

    // deprecated : da rimuovere quando viene effettuata 
    //              l'invocazione da linkFactory
    isLink() {

        return this.url.includes('amazon')
    }

    addTag( tag ) {

        if( this.url.includes('tag=') ) return this.url.replace(/tag=.*?(&|$)/, `tag=${tag}$1`);

        return this.url.includes('?') ? `${this.url}&tag=${tag}` : `${this.url}?tag=${tag}`;
    }

    
    getCode() {

        return { name : 'ASIN', value : this.getAsin() };
    }

  


    getAsin() {

        this.url = this.url.replace('gp/product', 'dp');

        /// se non trova nulla ritorna la url tale e quale        
        let asin = this.url.replace(/.*dp\/(.*?)(\/.*|$|\?.*)/ , '$1' );
        
        this.asin = asin === this.url ? null : asin;

        return this.asin;
    }


    uncache5min() {

        let now = new Date();
        return `${now.getMonth()}${now.getDate()}${now.getHours()}${now.getMinutes() % 5 }`;
    }

    /**
     * effettua la chiamata e prende i dati del link     
     */
    async getProperties( apiBase ) {

        let apiCall = `${apiBase}amazon_product_api/get_item/${this.asin}?${this.uncache5min()}`;

        console.log('__apicall', apiCall);

        let response = await fetch( `${this.proxy}${apiCall}` )
        this.data = await response.json();
            
        return this.data;
    }


    /**
     * Deprecato: effettua la chiamata e prende i dati del link     
     */
    // deprecated : da rimuovere quando viene effettuata 
    //              l'invocazione da linkFactory
    async getData( api_call ) {

        let response = await fetch( `${this.proxy}${api_call}` )
        this.data = await response.json();
        
        return this.data;
    }
    

}