<?php

/**
 * The abstract class for a admin page.
 *
 * @author     Time.ly Network Inc.
 * @since      2.0
 *
 * @package    AI1EC
 * @subpackage AI1EC.View
 */
abstract class Ai1ec_View_Admin_Abstract extends Ai1ec_Base {

    /**
     * @var string
     */
    protected $_page_id;

    /**
     * @var string
     */
    protected $_page_suffix;

    /**
     * @var string
     */
    protected $_api_registration;

    /**
     * Standard constructor
     *
     * @param Ai1ec_Registry_Object $registry
     */
    public function __construct( Ai1ec_Registry_Object $registry ) {
        parent::__construct( $registry );
        $exploded_class          = explode( '_', get_class( $this ) );
        $this->_page_suffix      = strtolower( end( $exploded_class ) );
        $this->_api_registration = $this->_registry->get( 'model.api.api-registration' );
    }

    /**
     * Get the url of the page
     *
     * @return string
     */
    public function get_url() {
        return add_query_arg(
            array(
                'post_type' => AI1EC_POST_TYPE,
                'page'      => AI1EC_PLUGIN_NAME . '-' . $this->_page_suffix,
            ),
            ai1ec_admin_url( 'edit.php' )
        );
    }

    public function isLoggedIn() {
        $signup_available        = $this->_api_registration->is_api_sign_up_available();
        $signed_to_api           = $this->_api_registration->is_signed();

        if ( $signup_available && ! $signed_to_api ) {
            return false;
        }

        return true;
    }

    /**
     * Adds the page to the correct menu.
     */
    abstract public function add_page();

    /**
     * Adds the page to the correct menu.
     */
    abstract public function add_meta_box();

    /**
     * Display the page html
     */
    abstract public function display_page();

    /**
     * Handle post, likely to be deprecated to use commands.
     */
    abstract public function handle_post();

}
