<?php

namespace Blazemedia\Affiliation\Rendering;

/**
 * restituisce i dati principali della single page
 */
class PageData {

    protected $post;

    function __construct( \WP_Post|null $post = null ) {

        if ( $post == null ) {

            global $post;
        }

        if ( $post == null ) {
            throw new Exception('PostData invoked without a post');
        }

        $this->post = $post;
    }


    /**
     * Identifica i campi di base da utilizzare.
     * 
     * Consente di appendere più campi quando necessario
     * aggiungendoli come parametro nella chiamata 
     * nell'array $moreParams
     *
     * @param array $moreParams - parametri aggiuntivi
     * @return array
     */
    function getParams( array $moreParams = [] ) : array {
        
        $params = array_merge([

            'domain'     => $this->getDomain(),
            'author_id'  => $this->post->post_author,
            'post_type'  => $this->post->post_type,
            'post_id'    => $this->post->ID,
            'taxonomies' => $this->getTaxonomies(),
            'device'     => wp_is_mobile() ? 'mobile' : 'desktop'

        ], $moreParams);

        return $params;
    }


    function getDomain() {

        $options = get_option('affiliation_settings_option_name');

        return $options['domain_2'];
    }


    protected function getTaxonomies() {

        $taxonomies = get_taxonomies();

        $tax_array =  array_reduce( $taxonomies, function( $tax_array, $taxonomy ) {

            $terms = wp_get_post_terms( $this->post->ID, $taxonomy, [ 'fields' => 'slugs'] );

            if( !empty($terms) )  $tax_array[ $taxonomy  ] = $terms;

            return $tax_array;

        }, []);

        
        return urlencode(json_encode($tax_array));
    }

    
    public function getPermalink(){
        return get_permalink($this->post->ID);
    }

}
