<?php

defined('ABSPATH') || exit;
class WC_Shipping_Rate
{
    protected $data = array('id' => '', 'method_id' => '', 'instance_id' => 0, 'label' => '', 'cost' => 0, 'taxes' => array());
    protected $meta_data = array();
    public function __construct($id = '', $label = '', $cost = 0, $taxes = array(), $method_id = '', $instance_id = 0)
    {
        $this->set_id($id);
        $this->set_label($label);
        $this->set_cost($cost);
        $this->set_taxes($taxes);
        $this->set_method_id($method_id);
        $this->set_instance_id($instance_id);
    }
    public function __isset($key)
    {
        return isset($this->data[$key]);
    }
    public function __get($key)
    {
        if (is_callable(array($this, "get_{$key}"))) {
            return $this->{"get_{$key}"}();
        } elseif (isset($this->data[$key])) {
            return $this->data[$key];
        } else {
            return '';
        }
    }
    public function __set($key, $value)
    {
        if (is_callable(array($this, "set_{$key}"))) {
            $this->{"set_{$key}"}($value);
        } else {
            $this->data[$key] = $value;
        }
    }
    public function set_id($id)
    {
        $this->data['id'] = (string) $id;
    }
    public function set_method_id($method_id)
    {
        $this->data['method_id'] = (string) $method_id;
    }
    public function set_instance_id($instance_id)
    {
        $this->data['instance_id'] = absint($instance_id);
    }
    public function set_label($label)
    {
        $this->data['label'] = (string) $label;
    }
    public function set_cost($cost)
    {
        $this->data['cost'] = $cost;
    }
    public function set_taxes($taxes)
    {
        $this->data['taxes'] = !empty($taxes) && is_array($taxes) ? $taxes : array();
    }
    public function get_id()
    {
        return apply_filters('woocommerce_shipping_rate_id', $this->data['id'], $this);
    }
    public function get_method_id()
    {
        return apply_filters('woocommerce_shipping_rate_method_id', $this->data['method_id'], $this);
    }
    public function get_instance_id()
    {
        return apply_filters('woocommerce_shipping_rate_instance_id', $this->data['instance_id'], $this);
    }
    public function get_label()
    {
        return apply_filters('woocommerce_shipping_rate_label', $this->data['label'], $this);
    }
    public function get_cost()
    {
        return apply_filters('woocommerce_shipping_rate_cost', $this->data['cost'], $this);
    }
    public function get_taxes()
    {
        return apply_filters('woocommerce_shipping_rate_taxes', $this->data['taxes'], $this);
    }
    public function get_shipping_tax()
    {
        return apply_filters('woocommerce_get_shipping_tax', count($this->taxes) > 0 && !WC()->customer->get_is_vat_exempt() ? array_sum($this->taxes) : 0, $this);
    }
    public function add_meta_data($key, $value)
    {
        $this->meta_data[wc_clean($key)] = wc_clean($value);
    }
    public function get_meta_data()
    {
        return $this->meta_data;
    }
}