<?php

if (!defined('ABSPATH')) {
    exit;
}
if (!class_exists('WP_List_Table')) {
    require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
}
class WC_Report_Stock extends WP_List_Table
{
    protected $max_items;
    public function __construct()
    {
        parent::__construct(array('singular' => 'stock', 'plural' => 'stock', 'ajax' => false));
    }
    public function no_items()
    {
        _e('No products found.', 'woocommerce');
    }
    public function display_tablenav($position)
    {
        if ('top' !== $position) {
            parent::display_tablenav($position);
        }
    }
    public function output_report()
    {
        $this->prepare_items();
        echo '<div id="poststuff" class="woocommerce-reports-wide">';
        $this->display();
        echo '</div>';
    }
    public function column_default($item, $column_name)
    {
        global $product;
        if (!$product || $product->get_id() !== $item->id) {
            $product = wc_get_product($item->id);
        }
        if (!$product) {
            return;
        }
        switch ($column_name) {
            case 'product':
                if ($sku = $product->get_sku()) {
                    echo esc_html($sku) . ' - ';
                }
                echo esc_html($product->get_name());
                if ($product->is_type('variation')) {
                    echo '<div class="description">' . wp_kses_post(wc_get_formatted_variation($product, true)) . '</div>';
                }
                break;
            case 'parent':
                if ($item->parent) {
                    echo esc_html(get_the_title($item->parent));
                } else {
                    echo '-';
                }
                break;
            case 'stock_status':
                if ($product->is_on_backorder()) {
                    $stock_html = '<mark class="onbackorder">' . __('On backorder', 'woocommerce') . '</mark>';
                } elseif ($product->is_in_stock()) {
                    $stock_html = '<mark class="instock">' . __('In stock', 'woocommerce') . '</mark>';
                } else {
                    $stock_html = '<mark class="outofstock">' . __('Out of stock', 'woocommerce') . '</mark>';
                }
                echo apply_filters('woocommerce_admin_stock_html', $stock_html, $product);
                break;
            case 'stock_level':
                echo esc_html($product->get_stock_quantity());
                break;
            case 'wc_actions':
                ?><p>
					<?php 
                $actions = array();
                $action_id = $product->is_type('variation') ? $item->parent : $item->id;
                $actions['edit'] = array('url' => admin_url('post.php?post=' . $action_id . '&action=edit'), 'name' => __('Edit', 'woocommerce'), 'action' => 'edit');
                if ($product->is_visible()) {
                    $actions['view'] = array('url' => get_permalink($action_id), 'name' => __('View', 'woocommerce'), 'action' => 'view');
                }
                $actions = apply_filters('woocommerce_admin_stock_report_product_actions', $actions, $product);
                foreach ($actions as $action) {
                    printf('<a class="button tips %1$s" href="%2$s" data-tip="%3$s">%4$s</a>', esc_attr($action['action']), esc_url($action['url']), sprintf(esc_attr__('%s product', 'woocommerce'), $action['name']), esc_html($action['name']));
                }
                ?>
				</p>
				<?php 
                break;
        }
    }
    public function get_columns()
    {
        $columns = array('product' => __('Product', 'woocommerce'), 'parent' => __('Parent', 'woocommerce'), 'stock_level' => __('Units in stock', 'woocommerce'), 'stock_status' => __('Stock status', 'woocommerce'), 'wc_actions' => __('Actions', 'woocommerce'));
        return $columns;
    }
    public function prepare_items()
    {
        $this->_column_headers = array($this->get_columns(), array(), $this->get_sortable_columns());
        $current_page = absint($this->get_pagenum());
        $per_page = apply_filters('woocommerce_admin_stock_report_products_per_page', 20);
        $this->get_items($current_page, $per_page);
        $this->set_pagination_args(array('total_items' => $this->max_items, 'per_page' => $per_page, 'total_pages' => ceil($this->max_items / $per_page)));
    }
}