<?php

namespace Utils;

use Utils\Entity\PacienteEntity;
use Utils\Model\PacienteModel;

/**
 * @author Gabriel <anhaia.gabriel@email.com>
 */
class PacienteRepository extends Repository
{

    /**
     * ConsultaRepository constructor.
     * @param null $model
     */
    public function __construct($model = null)
    {
        if (!empty($model)) {
            $this->model = $model;
        } else {
            $this->model = new PacienteModel();
        }
    }

    /**
     * Método responsável por salvar ou atualizar um paciente do sistema.
     * Se possuir id ele atualiza.
     *
     * @param PacienteEntity $paciente
     * @return bool
     * @throws \Exception
     */
    public function salvarPaciente(PacienteEntity $paciente)
    {
        if (empty($paciente->getNome())
        || empty($paciente->getSobrenome())
        || empty($paciente->getCpf())
        || empty($paciente->getRg())
        || empty($paciente->getEmail())) {
            throw new \Exception('Campos Obrigatórios não informados', 111);
        }

        return $this->model->persist($paciente);
    }

    /**
     * Método responsável por buscar um ou mas pacientes.
     *
     * @param PacienteEntity|null $paciente
     * @return array
     */
    public function buscarPacientes(PacienteEntity $paciente = null)
    {
        return $this->model->find($paciente);
    }

    /**
     * Deleta um paciente do sistema.
     *
     * @param PacienteEntity $paciente Paciente a ser apagado.
     * @return bool
     * @throws \Exception
     */
    public function deletarPaciente(PacienteEntity $paciente)
    {
        if (empty($paciente->getId())) {
            throw new \Exception('Identificador de paciente não informado.');
        }

        return $this->model->delete($paciente);
    }
}