<?php

namespace App\ViewModels\Unidade\UnidadeUpdateViewModel;
use App\Utils\Builder;
use App\Utils\ResponseException;
use Config\CustomRules;
use Exception;

class UnidadeUpdateViewModelBuilder implements Builder
{
    protected $cep;
    protected $bairro;
    protected $logradouro;
    protected $cidade;
    protected $estado;
    protected $numero;
    protected $complemento;
    protected $referencias;
    protected $telefone_1;
    protected $telefone_2;
    protected $observacao;
    protected $nome_fantasia;
    protected $razao_social;
    protected $cnpj;
    protected $ativo;
    protected $descricao;
    protected $telemedicina;

    protected $alterado_por;

    public function setDescricao($descricao)
    {
        $this->descricao = $descricao;
        return $this;
    }

    public function setTelemedicina($telemedicina)
    {
        $this->telemedicina = $telemedicina;
        return $this;
    }

    public function setCep($cep)
    {
        $this->cep = $cep;
        return $this;
    }

    public function setBairro($bairro)
    {
        $this->bairro = $bairro;
        return $this;
    }

    /**
     * @param mixed $logradouro
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setLogradouro($logradouro)
    {
        $this->logradouro = $logradouro;
        return $this;
    }

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

    /**
     * @param mixed $estado
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setEstado($estado)
    {
        $this->estado = $estado;
        return $this;
    }

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

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

    /**
     * @param mixed $referencias
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setReferencias($referencias)
    {
        $this->referencias = $referencias;
        return $this;
    }

    /**
     * @param mixed $telefone_1
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setTelefone1($telefone_1)
    {
        if ($telefone_1 && !preg_match(REGEX_PHONE, $telefone_1)) {
            throw new ResponseException(['telefone_1' => 'Informe um telefone_1 válido.']);
        }
        $this->telefone_1 = $telefone_1;
        return $this;
    }

    /**
     * @param mixed $telefone_2
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setTelefone2($telefone_2)
    {
        if ($telefone_2 && !preg_match(REGEX_PHONE, $telefone_2)) {
            throw new ResponseException(['telefone_2' => 'Informe um telefone_2 válido.']);
        }
        $this->telefone_2 = $telefone_2;
        return $this;
    }

    /**
     * @param mixed $observacao
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setObservacao($observacao)
    {
        $this->observacao = $observacao;
        return $this;
    }

    /**
     * @param mixed $nome_fantasia
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setNomeFantasia($nome_fantasia)
    {
        $this->nome_fantasia = $nome_fantasia;
        return $this;
    }

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

    /**
     * @param mixed $cnpj
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setCnpj($cnpj)
    {
        if ($cnpj && !preg_match(REGEX_CNPJ, $cnpj)) {
            throw new ResponseException(['cnpj' => 'Informe um cnpj válido.']);
        }
        $this->cnpj = $cnpj;
        return $this;
    }

    /**
     * @param mixed $ativo
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setAtivo($ativo)
    {
        $this->ativo = $ativo;
        return $this;
    }

    /**
     * @param mixed $alterado_por
     * @return UnidadeUpdateViewModelBuilder
     */
    public function setAlteradoPor($alterado_por)
    {
        $this->alterado_por = $alterado_por;
        return $this;
    }


    public function build () {
        $unidade_view_model = new UnidadeUpdateViewModel();
        $unidade_view_model->setCep($this->cep);
        $unidade_view_model->setBairro($this->bairro);
        $unidade_view_model->setLogradouro($this->logradouro);
        $unidade_view_model->setCidade($this->cidade);
        $unidade_view_model->setEstado($this->estado);
        $unidade_view_model->setNumero($this->numero);
        $unidade_view_model->setComplemento($this->complemento);
        $unidade_view_model->setReferencias($this->referencias);
        $unidade_view_model->setTelefone1($this->telefone_1);
        $unidade_view_model->setTelefone2($this->telefone_2);
        $unidade_view_model->setObservacao($this->observacao);
        $unidade_view_model->setNomeFantasia($this->nome_fantasia);
        $unidade_view_model->setRazaoSocial($this->razao_social);
        $unidade_view_model->setCnpj($this->cnpj);
        $unidade_view_model->setAlteradoPor($this->alterado_por);
        $unidade_view_model->setDescricao($this->descricao);
        $unidade_view_model->setTelemedicina($this->telemedicina);

        return $unidade_view_model;
    }
}
