<?php

namespace SovereignStack\SecuritySafe;

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

require_once( SECSAFE_DIR_ADMIN_TABLES . '/Table.php' );

/**
 * Class TableBlocked
 *
 * @package SecuritySafe
 */
final class TableBlocked extends Table {

	/**
	 * Get a list of columns. The format is:
	 * 'internal-name' => 'Title'
	 *
	 * @package WordPress
	 * @since   3.1.0
	 * @abstract
	 *
	 * @return array
	 */
	function get_columns() {

		return [
			'date' => __( 'Date', 'security-safe' ),
			'uri' => __( 'URL', 'security-safe' ),
			'user_agent' => __( 'User Agent', 'security-safe' ),
			'referer' => __( 'HTTP Referer', 'security-safe' ),
			'ip' => __( 'IP Address', 'security-safe' ),
			'status' => __( 'Status', 'security-safe' ),
			'details' => __( 'Details', 'security-safe' ),
		];
	}

	public function display_charts() {

		if( $this->hide_charts() ) {
			return;
		}

		$days = 30;
		$days_ago = $days - 1;

		echo '
    <div class="table">
        <div class="tr">

            <div class="chart chart-blocked-line td td-12 center">

                <h3>' . esc_html( sprintf( __( 'Threats Over The Past %d Days', 'security-safe' ), $days ) ) . '</h3>
                <div id="chart-line"></div>

            </div>

        </div>
    </div>';

		$charts = [];

		$columns = [
			[
				'id' => 'threats',
				'label' => __( 'Threats', 'security-safe' ),
				'color' => '#f6c600',
				'type' => 'area-spline',
				'db' => 'threats',
			],
			[
				'id' => 'blocked',
				'label' => __( 'Blocked', 'security-safe' ),
				'color' => '#0073aa',
				'type' => 'area-spline',
				'db' => 'blocked',
			],
		];

		$charts[] = [
			'id' => 'chart-line',
			'type' => 'line',
			'columns' => $columns,
			'y-label' => __( '# Threats', 'security-safe' ),
		];

		$args = [
			'date_start' => date( 'Y-m-d 00:00:00', strtotime( '-' . $days_ago . ' days' ) ),
			'date_end' => date( 'Y-m-d 23:59:59', time() ),
			'date_days' => $days,
			'date_days_ago' => $days_ago,
			'charts' => $charts,
		];

		// Load Charts
		Admin::load_charts( $args );
	}

	/**
	 * Set the type of data to display
	 *
	 * @since  2.0.0
	 */
	protected function set_type() {

		$this->type = 'threats';
	}

	protected function get_status() {

		return [
			//  'key'           => 'label'
			'not_blocked' => __( 'not blocked', 'security-safe' ),
			'blocked' => __( 'blocked', 'security-safe' ),
		];
	}

	/**
	 * Get the array of searchable columns in the database
	 *
	 * @since  2.0.0
	 * @return  array An unassociated array.
	 */
	protected function get_searchable_columns() {

		return [
			'uri',
			'ip',
			'referer',
		];
	}

	/**
	 * Add filters and per_page options
	 */
	protected function bulk_actions( $which = '' ) {

		$this->bulk_actions_load( $which );
	}

	protected function column_status( $item ) {

		return ( $item->status == 'blocked' ) ? __( 'blocked', 'security-safe' ) : __( 'not blocked', 'security-safe' );
	}

	protected function column_details( $item ) {

		$details = $item->details;

		if( $item->type == 'logins' ) {

			$details .= ' ';
			$details .= ( $item->status == 'success' ) ? __( 'Login attempt was successful.', 'security-safe' ) : '';
			$details .= ( $item->status == 'failed' ) ? __( 'Login attempt failed.', 'security-safe' ) : '';
			$details .= ( $item->status == 'blocked' ) ? __( 'Login attempt blocked.', 'security-safe' ) : '';
			$details .= ( $item->username ) ? ' ' . sprintf( __( 'Username: %s', 'security-safe' ), $item->username ) : '';
		}

		return esc_html( $details );
	}
}
