<?php

namespace SwedbankPaymentPortal\CC\HCCCommunicationEntity\HCCQueryResponse;

use JMS\Serializer\Annotation as Annotation;

/**
 * The container for the Address and card security code verification result.
 *
 * @Annotation\XmlRoot("Response")
 * @Annotation\AccessType("public_method")
 */
class Card
{
    /**
     * The container for the Address and card security code verification result.
     *
     * @var Cv2Avs
     *
     * @Annotation\Type("SwedbankPaymentPortal\CC\HCCCommunicationEntity\HCCQueryResponse\Cv2Avs")
     * @Annotation\XmlElement(cdata=false)
     * @Annotation\SerializedName("Cv2Avs")
     */
    private $cv2Avs;

    /**
     * Card category.
     *
     * @var string
     *
     * @Annotation\Type("string")
     * @Annotation\XmlElement(cdata=false)
     * @Annotation\SerializedName("card_category")
     */
    private $cardCategory;

    /**
     * Card expiry date.
     *
     * @var string
     *
     * @Annotation\Type("string")
     * @Annotation\XmlElement(cdata=false)
     * @Annotation\SerializedName("expirydate")
     */
    private $expiryDate;

    /**
     * Who issued the card.
     *
     * @var string
     *
     * @Annotation\Type("string")
     * @Annotation\XmlElement(cdata=false)
     */
    private $issuer;

    /**
     * The masked card number captured from the hosted page .
     *
     * @var string
     *
     * @Annotation\Type("string")
     * @Annotation\XmlElement(cdata=false)
     */
    private $pan;

    /**
     * The Card scheme of the card provided by the cardholder during the capture process.
     *
     * @var string
     *
     * @Annotation\Type("string")
     * @Annotation\XmlElement(cdata=false)
     * @Annotation\SerializedName("scheme")
     */
    private $cardScheme;

    /**
     * The Card Token generated by the Payment Gateway.
     *
     * @var string
     *
     * @Annotation\Type("string")
     * @Annotation\XmlElement(cdata=false)
     */
    private $token;

    /**
     * Card constructor.
     *
     * @param Cv2Avs $cv2Avs
     * @param string $cardCategory
     * @param string $expiryDate
     * @param string $issuer
     * @param string $pan
     * @param string $cardScheme
     * @param string $token
     */
    public function __construct(Cv2Avs $cv2Avs, $cardCategory, $expiryDate, $issuer, $pan, $cardScheme, $token)
    {
        $this->cv2Avs = $cv2Avs;
        $this->cardCategory = $cardCategory;
        $this->expiryDate = $expiryDate;
        $this->issuer = $issuer;
        $this->pan = $pan;
        $this->cardScheme = $cardScheme;
        $this->token = $token;
    }

    /**
     * Cv2Avs getter.
     *
     * @return Cv2Avs
     */
    public function getCv2Avs()
    {
        return $this->cv2Avs;
    }

    /**
     * Cv2Avs setter.
     *
     * @param Cv2Avs $cv2Avs
     */
    public function setCv2Avs($cv2Avs)
    {
        $this->cv2Avs = $cv2Avs;
    }

    /**
     * CardCategory getter.
     *
     * @return string
     */
    public function getCardCategory()
    {
        return $this->cardCategory;
    }

    /**
     * CardCategory setter.
     *
     * @param string $cardCategory
     */
    public function setCardCategory($cardCategory)
    {
        $this->cardCategory = $cardCategory;
    }

    /**
     * ExpiryDate getter.
     *
     * @return string
     */
    public function getExpiryDate()
    {
        return $this->expiryDate;
    }

    /**
     * ExpiryDate setter.
     *
     * @param string $expiryDate
     */
    public function setExpiryDate($expiryDate)
    {
        $this->expiryDate = $expiryDate;
    }

    /**
     * Issuer getter.
     *
     * @return string
     */
    public function getIssuer()
    {
        return $this->issuer;
    }

    /**
     * Issuer setter.
     *
     * @param string $issuer
     */
    public function setIssuer($issuer)
    {
        $this->issuer = $issuer;
    }

    /**
     * Pan getter.
     *
     * @return string
     */
    public function getPan()
    {
        return $this->pan;
    }

    /**
     * Pan setter.
     *
     * @param string $pan
     */
    public function setPan($pan)
    {
        $this->pan = $pan;
    }

    /**
     * CardScheme getter.
     *
     * @return string
     */
    public function getCardScheme()
    {
        return $this->cardScheme;
    }

    /**
     * CardScheme setter.
     *
     * @param string $cardScheme
     */
    public function setCardScheme($cardScheme)
    {
        $this->cardScheme = $cardScheme;
    }

    /**
     * Token getter.
     *
     * @return string
     */
    public function getToken()
    {
        return $this->token;
    }

    /**
     * Token setter.
     *
     * @param string $token
     */
    public function setToken($token)
    {
        $this->token = $token;
    }
}
