<?php
/**
 * This file is part of the Klarna Core module
 *
 * (c) Klarna Bank AB (publ)
 *
 * For the full copyright and license information, please view the NOTICE
 * and LICENSE files that were distributed with this source code.
 */

namespace Klarna\Core\Config;

use Klarna\Core\Api\VersionInterface;

/**
 * Class ApiVersion
 *
 * @package Klarna\Core\Config
 * @SuppressWarnings(PHPMD.TooManyFields)
 */
class ApiVersion implements VersionInterface
{
    /**
     * @var string
     */
    private $type = 'payments';
    /**
     * @var string
     */
    private $code = 'kp_na';
    /**
     * @var bool
     */
    private $shipping_callback_support = false;
    /**
     * @var bool
     */
    private $merchant_checkbox_support = false;
    /**
     * @var bool
     */
    private $date_of_birth_mandatory_support = false;
    /**
     * @var bool
     */
    private $phone_mandatory_support = false;
    /**
     * @var string
     */
    private $ordermanagement;
    /**
     * @var bool
     */
    private $title_mandatory_support = false;
    /**
     * @var bool
     */
    private $delayed_push_notification = false;
    /**
     * @var bool
     */
    private $partial_payment_disabled = false;
    /**
     * @var bool
     */
    private $separate_tax_line = false;
    /**
     * @var bool
     */
    private $shipping_in_iframe = false;
    /**
     * @var bool
     */
    private $cart_totals_in_iframe = false;
    /**
     * @var bool
     */
    private $packstation_support = false;
    /**
     * @var string
     */
    private $production_url = 'https://api.klarna.com';
    /**
     * @var string
     */
    private $testdrive_url = 'https://api.playground.klarna.com';
    /**
     * @var bool
     */
    private $payment_review = false;
    /**
     * @var string
     */
    private $label = '';

    /**
     * ApiVersion constructor.
     *
     * @param string $type
     */
    public function __construct($data = [])
    {
        foreach ($data as $key => $value) {
            if (property_exists($this, $key)) {
                $this->$key = $value;
            }
        }
    }

    /**
     * @return bool
     */
    public function isCartTotalsInIframe()
    {
        return $this->cart_totals_in_iframe;
    }

    /**
     * @param bool $cart_totals_in_iframe
     * @return ApiVersion
     */
    public function setCartTotalsInIframe($cart_totals_in_iframe)
    {
        $this->cart_totals_in_iframe = $cart_totals_in_iframe;
        return $this;
    }

    /**
     * @return bool
     */
    public function isPackstationSupport()
    {
        return $this->packstation_support;
    }

    /**
     * @param bool $packstation_support
     * @return ApiVersion
     */
    public function setPackstationSupport($packstation_support)
    {
        $this->packstation_support = $packstation_support;
        return $this;
    }

    /**
     * @return string
     */
    public function getType()
    {
        return $this->type;
    }

    /**
     * @param mixed $type
     * @return ApiVersion
     */
    public function setType($type)
    {
        $this->type = $type;
        return $this;
    }

    /**
     * @return bool
     */
    public function isShippingCallbackSupport()
    {
        return $this->shipping_callback_support;
    }

    /**
     * @param mixed $shipping_callback_support
     * @return ApiVersion
     */
    public function setShippingCallbackSupport($shipping_callback_support)
    {
        $this->shipping_callback_support = $shipping_callback_support;
        return $this;
    }

    /**
     * @return bool
     */
    public function isMerchantCheckboxSupport()
    {
        return $this->merchant_checkbox_support;
    }

    /**
     * @param mixed $merchant_checkbox_support
     * @return ApiVersion
     */
    public function setMerchantCheckboxSupport($merchant_checkbox_support)
    {
        $this->merchant_checkbox_support = $merchant_checkbox_support;
        return $this;
    }

    /**
     * @return bool
     */
    public function isDateOfBirthMandatorySupport()
    {
        return $this->date_of_birth_mandatory_support;
    }

    /**
     * @param mixed $date_of_birth_mandatory_support
     * @return ApiVersion
     */
    public function setDateOfBirthMandatorySupport($date_of_birth_mandatory_support)
    {
        $this->date_of_birth_mandatory_support = $date_of_birth_mandatory_support;
        return $this;
    }

    /**
     * @return bool
     */
    public function isPhoneMandatorySupport()
    {
        return $this->phone_mandatory_support;
    }

    /**
     * @param mixed $phone_mandatory_support
     * @return ApiVersion
     */
    public function setPhoneMandatorySupport($phone_mandatory_support)
    {
        $this->phone_mandatory_support = $phone_mandatory_support;
        return $this;
    }

    /**
     * @return string
     */
    public function getOrdermanagement()
    {
        return $this->ordermanagement;
    }

    /**
     * @param mixed $ordermanagement
     * @return ApiVersion
     */
    public function setOrdermanagement($ordermanagement)
    {
        $this->ordermanagement = $ordermanagement;
        return $this;
    }

    /**
     * @return bool
     */
    public function isTitleMandatorySupport()
    {
        return $this->title_mandatory_support;
    }

    /**
     * @param mixed $title_mandatory_support
     * @return ApiVersion
     */
    public function setTitleMandatorySupport($title_mandatory_support)
    {
        $this->title_mandatory_support = $title_mandatory_support;
        return $this;
    }

    /**
     * @return bool
     */
    public function isDelayedPushNotification()
    {
        return $this->delayed_push_notification;
    }

    /**
     * @param mixed $delayed_push_notification
     * @return ApiVersion
     */
    public function setDelayedPushNotification($delayed_push_notification)
    {
        $this->delayed_push_notification = $delayed_push_notification;
        return $this;
    }

    /**
     * @return bool
     */
    public function isPartialPaymentDisabled()
    {
        return $this->partial_payment_disabled;
    }

    /**
     * @param mixed $partial_payment_disabled
     * @return ApiVersion
     */
    public function setPartialPaymentDisabled($partial_payment_disabled)
    {
        $this->partial_payment_disabled = $partial_payment_disabled;
        return $this;
    }

    /**
     * @return bool
     */
    public function isSeparateTaxLine()
    {
        return $this->separate_tax_line;
    }

    /**
     * @param mixed $separate_tax_line
     * @return ApiVersion
     */
    public function setSeparateTaxLine($separate_tax_line)
    {
        $this->separate_tax_line = $separate_tax_line;
        return $this;
    }

    /**
     * @return bool
     */
    public function isShippingInIframe()
    {
        return $this->shipping_in_iframe;
    }

    /**
     * @param mixed $shipping_in_iframe
     * @return ApiVersion
     */
    public function setShippingInIframe($shipping_in_iframe)
    {
        $this->shipping_in_iframe = $shipping_in_iframe;
        return $this;
    }

    /**
     * @param bool $testmode
     * @return string
     */
    public function getUrl($testmode = true)
    {
        if ($testmode) {
            return $this->getTestdriveUrl();
        }
        return $this->getProductionUrl();
    }

    /**
     * @return string
     */
    public function getTestdriveUrl()
    {
        return $this->testdrive_url;
    }

    /**
     * @param mixed $testdrive_url
     * @return ApiVersion
     */
    public function setTestdriveUrl($testdrive_url)
    {
        $this->testdrive_url = $testdrive_url;
        return $this;
    }

    /**
     * @return string
     */
    public function getProductionUrl()
    {
        return $this->production_url;
    }

    /**
     * @param mixed $production_url
     * @return ApiVersion
     */
    public function setProductionUrl($production_url)
    {
        $this->production_url = $production_url;
        return $this;
    }

    /**
     * @return bool
     */
    public function isPaymentReview()
    {
        return $this->payment_review;
    }

    /**
     * @param bool $payment_review
     * @return ApiVersion
     */
    public function setPaymentReview($payment_review)
    {
        $this->payment_review = $payment_review;
        return $this;
    }

    /**
     * @return string
     */
    public function getLabel()
    {
        return $this->label;
    }

    /**
     * @param string $label
     * @return ApiVersion
     */
    public function setLabel($label)
    {
        $this->label = $label;
        return $this;
    }

    /**
     * @return string
     */
    public function getCode()
    {
        return $this->code;
    }

    /**
     * @param string $code
     * @return ApiVersion
     */
    public function setCode($code)
    {
        $this->code = $code;
        return $this;
    }
}