<?php namespace App\ViewModels\Agenda\AgendaConflictingViewModel;

use App\Utils\Builder;
use App\Utils\ResponseException;

class AgendaConflictingViewModelBuilder implements Builder
{
    protected $id;
    protected $data;
    protected $hora_inicio;
    protected $hora_final;

    public function setId(int $id): AgendaConflictingViewModelBuilder
    {
        $this->id = $id;
        return $this;
    }

    public function setData(string $data): AgendaConflictingViewModelBuilder
    {
        if (preg_match(REGEX_DATE_US_PATTERN, $data)) {
            $this->data = $data;
            return $this;
        } else {
            throw new ResponseException(['data' => 'Data fora do formato: ' . $data]);
        }
    }

    public function setHoraInicio(string $hora_inicio): AgendaConflictingViewModelBuilder
    {
        if (preg_match(REGEX_HORARIO, $hora_inicio)) {
            $this->hora_inicio = $hora_inicio;
            return $this;
        } else {
            throw new ResponseException(['hora_inicio' => 'Horário fora do formato: ' . $hora_inicio]);
        }
    }

    public function setHoraFinal(string $hora_final): AgendaConflictingViewModelBuilder
    {
        if (preg_match(REGEX_HORARIO, $hora_final)) {
            $this->hora_final = $hora_final;
            return $this;
        } else {
            throw new ResponseException(['hora_inicio' => 'Horário fora do formato: ' . $hora_final]);
        }
    }

    public function build() : AgendaConflictingViewModel
    {
        $agenda_conflicting_vm = new AgendaConflictingViewModel();
        $agenda_conflicting_vm->setid($this->id);
        $agenda_conflicting_vm->setdata($this->data);
        $agenda_conflicting_vm->sethorainicio($this->hora_inicio);
        $agenda_conflicting_vm->sethorafinal($this->hora_final);
        return $agenda_conflicting_vm;
    }


}