<?php

namespace cnb\renderer;

use cnb\utils\CnbUtils;

// don't load directly
defined( 'ABSPATH' ) || die( '-1' );

class RendererFactory {

    /**
     * @return string
     */
    function getRenderer() {
        $cnb_options = get_option( 'cnb' );

        return ( new CnbUtils() )->is_use_cloud( $cnb_options ) ? 'cloud' : 'modern';
    }

    /**
     * If we're in the "wp_loaded" hook, we don't NEED is_admin(), but it's good to have as a safety check
     *
     * @return bool
     */
    function shouldRender() {
        $cnb_options = get_option( 'cnb' );

        return ! is_admin() && ( new CnbUtils() )->isButtonActive( $cnb_options );
    }

    /**
     * Find the proper renderer and load it. The renderer is responsible for adding itself to the proper hooks.
     *
     * Proper hooks are (probably/likely) `wp_head` and `wp_footer`
     *
     * This function should be scheduled on the front-end (only), usually via the `wp_loaded` hook.
     *
     * This call can be done at any user/capability level.
     *
     * @return void
     */
    public static function register() {
        $factory = new RendererFactory();

        if ( ! $factory->shouldRender() ) {
            $noop_renderer = new NoopRenderer();
            $noop_renderer->register();
            return;
        }

        switch ( $factory->getRenderer() ) {
            case 'cloud':
                $cloud_renderer = new CloudRenderer();
                $cloud_renderer->register();
                break;
            case 'modern':
                $modern_renderer = new ModernRenderer();
                $modern_renderer->register();
                break;
            default:
                $noop_renderer = new NoopRenderer();
                $noop_renderer->register();
        }
    }
}
