<?php
/**
 * Plugin Name: ai-simplesitestats
 * Plugin URI: https://git.autistici.org/noblogs/ai-simplesitestats-plugin
 * Description: Show simple site statistics
 * Version: 0.0.1
 * Author: Autistici/Inventati
 * Author URI: https://www.autistici.org/
 * License: MIT
 * License URI: http://opensource.org/licenses/MIT
 */

if (!defined('SIMPLESITESTATS_URL')) {
    define('SIMPLESITESTATS_URL', 'http://analytics.investici.org:3389');
}

namespace AI_SSS;

class StatisticsPage {

    private $resolutions = array(
        "day",
        "month",
        "year",
    );

    private $metrics = array(
        "page",
        "browser",
        "device",
    );

    public function __construct($aisss) {
        self::$aiSSS = $aisss;
    }

    public function show() {
        $metric = 'browser';
        if (isset($_GET['sss_metric'])) {
            $metric = $_GET['sss_metric'];
        }

        $resolution = 'day';
        if (isset($_GET['sss_resolution'])) {
            $resolution = $_GET['sss_resolution'];
        }

        $site_name = preg_replace("(^https?://)", "", site_url());
        $timeseriesJSON = $this->getTimeseriesJSON($site_name, $metric, $resolution);

        echo '<div id="ai-sss-container" class="wrap">';
        echo '<h2>Statistics for ' . $site_name . '</h2>';

        // Output the chart element along with the data.
        echo '<div style="width:100%;"><canvas id="sssChart" class="simplesitestats-chart" data-timeseries-element-id="sssChartData"></canvas></div>';
        echo '<div style="display:none;" id="sssChartData">' . $timeseriesJSON . '</div>';

        // Form to control chart parameters.
        echo '<form method="get" action="?page=' . htmlentities($_GET['page']) . '">';
        wp_nonce_field('simplesitestats_settings');

        // Show chart controls.
        $this->showSelectControl("sss_metric", "Metric", $this->metrics, $metric);
        $this->showSelectControl("sss_resolution", "Resolution", $this->resolutions, $resolution);

        echo '<button type="submit">Update</button>';
        echo '</form>';

        echo '</div>';
    }

    public function adminScripts() {
        wp_enqueue_script('ai-simplesitestats', self::$aiSSS->getPluginURL() . 'js/simplesitestats.js', array(), self::$aiSSS->getPluginVersion(), true);
    }

    public function adminStyles() {
    }

    function showSelectControl($name, $label, $choices, $value) {
        echo '<div>';
        echo '<label for="'. $name . '_field">' . $label . '</label>';
        echo '<select name="' . $name . '" id="' . $name . '_field">';
        for ($i = 0; $i < len($choices); $i++) {
            echo '<option value="' . $choices[$i] . '"';
            if ($choices[$i] === $value) {
                echo ' selected';
            }
            echo '>' . $choices[$i] . '</option>';
        }
        echo '</select></div>';
    }

    function getTimeseriesJSON($site, $metric, $resolution) {
        $url = SIMPLESITESTATS_URL . '/query?' . http_build_query(array(
            'site' => $site,
            'metric' => $metric,
            'level' => $resolution,
        ));

        $response = wp_remote_get($url);
        if ((is_wp_error($response)) || (200 !== wp_remote_retrieve_response_code($response))) {
            return null;
        }
        return $response['body'];
    }

}


class AiSSS {

    private $version = '0.0.1', $blog_id;

    public function __construct() {
        global $blog_id;
        self::$blog_id = $blog_id;

        $this->addStatsPage();
    }

    public function addStatsPage() {
        $statsPage = new AI_SSS\Statistics($this);
        $statsPageId = add_dashboard_page(
            __('Statistics', 'ai-simplesitestats'),
            'Stats',
            '',                 // cap
            'ai-sss_stats',
            array($statsPage, 'show'));
        add_action('admin_print_scripts-' . $statsPageId,
                   array($statsPage, 'adminScripts'));
        add_action('admin_print_styles-' . $statsPageId,
                   array($statsPage, 'adminStyles'));
    }

    public function getPluginURL() {
        return trailingslashit(plugin_dir_url(dirname(__FILE__)));
    }

    public function getPluginVersion() {
        return self::$version;
    }

}