<?php

class PaymentInfo extends DefaultClass{
  private $id;
  private $nome;
  private $primeiro_nome;
  private $ultimo_nome;
  private $email;
  private $documento;
  private $razao_social;
  private $telefone;
  private $data_nascimento;
  private $shipping_address;
  private $payment_address;
  private $holder;
  private $creditCard;
  private $products = array();
  private $frete;

  /**
   * @return mixed
   */
  public function getRazaoSocial()
  {
    return $this->razao_social;
  }

  /**
   * @param mixed $razao_social
   */
  public function setRazaoSocial($razao_social)
  {
    $this->razao_social = $razao_social;
  }

  /**
   * @return mixed
   */
  public function getNome()
  {
    return $this->nome;
  }

  /**
   * @param mixed $nome
   */
  public function setNome($nome)
  {
    $this->nome = $nome;
  }

  /**
   * @return mixed
   */
  public function getPrimeiroNome()
  {
      return $this->primeiro_nome;
  }

  /**
   * @param mixed $primeiro_nome
   */
  public function setPrimeiroNome($primeiro_nome): void
  {
      $this->primeiro_nome = $primeiro_nome;
  }

    /**
     * @return mixed
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @param mixed $id
     */
    public function setId($id): void
    {
        $this->id = $id;
    }

    /**
     * @return mixed
     */
    public function getUltimoNome()
    {
        return $this->ultimo_nome;
    }

    /**
     * @param mixed $ultimo_nome
     */
    public function setUltimoNome($ultimo_nome): void
    {
        $this->ultimo_nome = $ultimo_nome;
    }

  /**
   * @return mixed
   */
  public function getEmail()
  {
    return $this->email;
  }

  /**
   * @param mixed $email
   */
  public function setEmail($email)
  {
    $this->email = $email;
  }

  /**
   * @return mixed
   */
  public function getDocumento()
  {
    return $this->documento;
  }

  /**
   * @param mixed $documento
   */
  public function setDocumento($tipo, $numero)
  {
    $this->documento = new stdClass();
    $this->documento->tipo = $tipo;
    $this->documento->numero = preg_replace("/[^0-9]/", "", $numero);
  }

  /**
   * @return mixed
   */
  public function getTelefone()
  {
    return $this->telefone;
  }

  /**
   * @param mixed $telefone
   */
  public function setTelefone($tipo, $ddd, $telefone)
  {
    $this->telefone =  new stdClass();
    $this->telefone->tipo = $tipo;
    $this->telefone->ddd = preg_replace("/[^0-9]/", "", $ddd);
    $this->telefone->telefone = preg_replace("/[^0-9]/", "", $telefone);
    $this->telefone->completo = preg_replace("/[^0-9]/", "", $ddd.$telefone);
  }

  /**
   * @return mixed
   */
  public function getDataNascimento()
  {
    return $this->data_nascimento;
  }

  /**
   * @param mixed $data_nascimento
   */
  public function setDataNascimento($data_nascimento)
  {
    $this->data_nascimento = $data_nascimento;
  }

  /**
   * @return mixed
   */
  public function getShippingAddress(): PaymentInfoAdress
  {
    return $this->shipping_address;
  }

  /**
   * @return mixed
   */
  public function getPaymentAddress(): PaymentInfoAdress
  {
    return $this->payment_address;
  }

  /**
   * @param mixed $payment_address
   */
  public function setPaymentAddress(PaymentInfoAdress $payment_address)
  {
    $this->payment_address = $payment_address;
  }

  /**
   * @param mixed $shipping_address
   */
  public function setShippingAddress(PaymentInfoAdress $shipping_address)
  {
    $this->shipping_address = $shipping_address;
  }

  /**
   * @return mixed
   */
  public function getHolder(): PaymentHolder
  {
    return $this->holder;
  }

  /**
   * @param mixed $holder
   */
  public function setHolder(PaymentHolder $holder)
  {
    $this->holder = $holder;
  }

  /**
   * @return mixed
   */
  public function getCreditCard(): PaymentCreditCard
  {
    return $this->creditCard;
  }

  /**
   * @param mixed $creditCard
   */
  public function setCreditCard(PaymentCreditCard $creditCard)
  {
    $this->creditCard = $creditCard;
  }

  /**
   * @return array
   */
  public function getProducts()
  {
    return $this->products;
  }

  /**
   * @param array $products
   */
  public function setProducts(PaymentProduct $products)
  {
    $this->products[] = $products;
  }

  /**
   * @return mixed
   */
  public function getFrete()
  {
    return $this->frete;
  }

  /**
   * @param mixed $frete
   */
  public function setFrete($frete)
  {
    $this->frete = $frete;
  }

}

class PaymentInfoAdress{
  private $postcode;
  private $rua;
  private $numero;
  private $complemento;
  private $bairro;
  private $cidade;
  private $uf;
  private $ufName;
  private $pais;

  /**
   * @return mixed
   */
  public function getPostcode()
  {
    return $this->postcode;
  }

  /**
   * @param mixed $postcode
   */
  public function setPostcode($postcode)
  {
    $this->postcode = $postcode;
  }

  /**
   * @return mixed
   */
  public function getRua()
  {
    return $this->rua;
  }

  /**
   * @param mixed $rua
   */
  public function setRua($rua)
  {
    $this->rua = $rua;
  }

  /**
   * @return mixed
   */
  public function getNumero()
  {
    return $this->numero;
  }

  /**
   * @param mixed $numero
   */
  public function setNumero($numero)
  {
    $this->numero = $numero;
  }

  /**
   * @return mixed
   */
  public function getComplemento()
  {
    return $this->complemento;
  }

  /**
   * @param mixed $complemento
   */
  public function setComplemento($complemento)
  {
    $this->complemento = $complemento;
  }

  /**
   * @return mixed
   */
  public function getBairro()
  {
    return $this->bairro;
  }

  /**
   * @param mixed $bairro
   */
  public function setBairro($bairro)
  {
    $this->bairro = $bairro;
  }

  /**
   * @return mixed
   */
  public function getCidade()
  {
    return $this->cidade;
  }

  /**
   * @param mixed $cidade
   */
  public function setCidade($cidade)
  {
    $this->cidade = $cidade;
  }

  /**
   * @return mixed
   */
  public function getUf()
  {
    return $this->uf;
  }

  /**
   * @param mixed $uf
   */
  public function setUf($uf)
  {
    $this->uf = $uf;
  }

  /**
  * @return mixed
  */
  public function getUfName()
  {
    return $this->ufName;
  }

  /**
  * @param mixed $ufName
  */
  public function setUfName($ufName)
  {
    $this->ufName = $ufName;
  }

  /**
   * @return mixed
   */
  public function getPais()
  {
    return $this->pais;
  }

  /**
   * @param mixed $pais
   */
  public function setPais($pais)
  {
    $this->pais = $pais;
  }

}

class PaymentCreditCard{

  private $nome;
  private $bandeira;
  private $numero;
  private $dataExp;
  private $codigo;
  private $parcelas;

  /**
   * @return mixed
   */
  public function getNome()
  {
    return $this->nome;
  }

  /**
   * @param mixed $nome
   */
  public function setNome($nome)
  {
    $this->nome = $nome;
  }

  /**
   * @return mixed
   */
  public function getBandeira()
  {
    return $this->bandeira;
  }

  /**
   * @param mixed $bandeira
   */
  public function setBandeira($bandeira)
  {
    $this->bandeira = $bandeira;
  }

  /**
   * @return mixed
   */
  public function getNumero()
  {
    return $this->numero;
  }

  /**
   * @param mixed $numero
   */
  public function setNumero($numero)
  {
    $this->numero = str_replace(' ', '', $numero);
  }

  /**
   * @return mixed
   */
  public function getDataExp()
  {
    return $this->dataExp;
  }

  /**
   * @param mixed $dataExp
   */
  public function setDataExp($mes, $ano)
  {
    $this->dataExp =  new stdClass();
    $this->dataExp->mes = $mes;
    $this->dataExp->ano = $ano;
  }

  /**
   * @return mixed
   */
  public function getCodigo()
  {
    return $this->codigo;
  }

  /**
   * @param mixed $codigo
   */
  public function setCodigo($codigo)
  {
    $this->codigo = $codigo;
  }

  /**
   * @return mixed
   */
  public function getParcelas()
  {
    return $this->parcelas;
  }

  /**
   * @param mixed $parcelas
   */
  public function setParcelas($parcelas)
  {
    $this->parcelas = $parcelas;
  }

}

class PaymentProduct{

  private $id;
  private $descricao;
  private $quantity;
  private $price;
  private $model;

  /**
  * @return mixed
  */
  public function getId()
  {
    return $this->id;
  }

  /**
  * @param mixed $id
  */
  public function setId($id)
  {
    $this->id = $id;
  }

  /**
   * @return mixed
   */
  public function getDescricao()
  {
    return $this->descricao;
  }

  /**
   * @param mixed $descricao
   */
  public function setDescricao($descricao)
  {
    $this->descricao = $descricao;
  }

  /**
   * @return mixed
   */
  public function getQuantity()
  {
    return $this->quantity;
  }

  /**
   * @param mixed $quantity
   */
  public function setQuantity($quantity)
  {
    $this->quantity = $quantity;
  }

  /**
   * @return mixed
   */
  public function getPrice()
  {
    return $this->price;
  }

  /**
   * @param mixed $price
   */
  public function setPrice($price)
  {
    $this->price = $price;
  }

  /**
   * @return mixed
   */
  public function getModel()
  {
    return $this->model;
  }

  /**
   * @param mixed $model
   */
  public function setModel($model)
  {
    $this->model = $model;
  }

}

class PaymentHolder{

  private $nome;
  private $email;
  private $documento;
  private $telefone;
  private $holderAddress;
  private $data_nascimento;

  /**
   * @return mixed
   */
  public function getNome()
  {
    return $this->nome;
  }

  /**
   * @param mixed $nome
   */
  public function setNome($nome)
  {
    $this->nome = $nome;
  }

  /**
   * @return mixed
   */
  public function getEmail()
  {
    return $this->email;
  }

  /**
   * @param mixed $email
   */
  public function setEmail($email)
  {
    $this->email = $email;
  }

  /**
   * @return mixed
   */
  public function getDocumento()
  {
    return $this->documento;
  }

  /**
   * @param mixed $documento
   */
  public function setDocumento($tipo, $numero)
  {
    $this->documento = new stdClass();
    $this->documento->tipo = $tipo;
    $this->documento->numero = preg_replace("/[^0-9]/", "", $numero);
  }

  /**
   * @return mixed
   */
  public function getTelefone()
  {
    return $this->telefone;
  }

  /**
   * @param mixed $telefone
   */
  public function setTelefone($tipo, $ddd, $telefone)
  {
    $this->telefone =  new stdClass();
    $this->telefone->tipo = $tipo;
    $this->telefone->ddd = preg_replace("/[^0-9]/", "", $ddd);
    $this->telefone->telefone = preg_replace("/[^0-9]/", "", $telefone);
    $this->telefone->completo = preg_replace("/[^0-9]/", "", $ddd.$telefone);
  }


  /**
   * @return mixed
   */
  public function getHolderAddress(): PaymentInfoAdress
  {
    return $this->holderAddress;
  }

  /**
   * @param mixed $address
   */
  public function setHolderAddress(PaymentInfoAdress $holderAddress)
  {
    $this->holderAddress = $holderAddress;
  }

  /**
   * @return mixed
   */
  public function getDataNascimento()
  {
    return $this->data_nascimento;
  }

  /**
   * @param mixed $data_nascimento
   */
  public function setDataNascimento($data_nascimento)
  {
    $this->data_nascimento = $data_nascimento;
  }

}



