<?php namespace App\Mappers;



use App\Entities\PreAgendamento\PreAgendamento;
use App\Services\JWTService;
use App\Utils\Collections\GeneralCollection;
use App\ViewModels\PreAgendamento\PreAgendamentoDetailsViewModel\PreAgendamentoDetailsViewModel;
use App\ViewModels\PreAgendamento\PreAgendamentoDetailsViewModel\PreAgendamentoDetailsViewModelBuilder;
use App\ViewModels\PreAgendamento\PreAgendamentoRegistrationViewModel\PreAgendamentoRegistrationViewModel;
use App\ViewModels\PreAgendamento\PreAgendamentoUpdateViewModel\PreAgendamentoUpdateViewModel;

class PreAgendamentoMapper
{
    // CADASTRO DE PRE AGENDAMENTOS
    public static function getPreAgendamentoRegistrationVMFromArray (array $data) : PreAgendamentoRegistrationViewModel {
        return PreAgendamentoRegistrationViewModel::builder()
            ->setIdAgendaEspecialidade($data['id_agenda_especialidade'])
            ->setIdEspecialidade($data['id_especialidade'])
            ->setClienteNome($data['cliente_nome'])
            ->setClienteTelefone($data['cliente_telefone'])
            ->build();
    }
    public static function getPreAgendamentoFromPreAgendamentoRegistrationVM (PreAgendamentoRegistrationViewModel $preagendamento_registration_vm) : PreAgendamento {
        return PreAgendamento::builder()
            ->setIdAgendaEspecialidade($preagendamento_registration_vm->getIdAgendaEspecialidade())
            ->setIdEspecialidade($preagendamento_registration_vm->getIdEspecialidade())
            ->setClienteNome($preagendamento_registration_vm->getClienteNome())
            ->setClienteTelefone($preagendamento_registration_vm->getClienteTelefone())
            ->setCriadoPor(1)
            ->setAlteradoPor(1)
            ->setStatus(1)
            ->build();
    }

    // LISTAGEM DE PRE AGENDAMENTOS
    public static function getPreAgendamentoDetailsVMFromArray (array $preagendamento) : PreAgendamentoDetailsViewModel
    {
        $pet_details_vm = PreAgendamentoDetailsViewModel::builder()
            ->setPreAgendamentoId($preagendamento['pre_agendamento_id'] ?? 0)
            ->setIdAgendaEspecialidade($preagendamento['id_agenda_especialidade'] ?? 0)
            ->setClienteNome($preagendamento['cliente_nome'] ?? '')
            ->setClienteTelefone($preagendamento['cliente_telefone'] ?? '')
            ->setIdEspecialidade($preagendamento['id_especialidade'] ?? '')
            ->setDescricaoEspecialidade($preagendamento['descricao_especialidade'] ?? 0)
            ->setStatusId($preagendamento['status_id'] ?? '')
            ->setStatusDescricao($preagendamento['status_descricao'] ?? '')
            ->setAgendaHoraInicio($preagendamento['agenda_hora_inicio'] ?? '')
            ->setAgendaHoraFinal($preagendamento['agenda_hora_final'] ?? '')
            ->setAgendaData($preagendamento['agenda_data'] ?? '');
        return $pet_details_vm;
    }

    public static function getPreAgendamentoDetailsVMCollectionFromArray (array $response_array) : GeneralCollection {
        $preagendamento_details_vm_collection = new GeneralCollection();
        foreach ($response_array as $row) {
            $preagendamento_details_vm = PreAgendamentoMapper::getPreAgendamentoDetailsVMFromArray($row);
            $preagendamento_details_vm_collection->push($preagendamento_details_vm);
        }
        return $preagendamento_details_vm_collection;
    }

    public static function getPreAgendamentosDetailsArrayFromPreAgendamentoDetailsVMCollection (GeneralCollection $paciente_details_vm_collection) : array {
        return $paciente_details_vm_collection->toArray();
    }

    public static function getPreAgendamentoUpdateVMFromArray(array $data) : PreAgendamentoUpdateViewModel {
        $preagendamento_update_vm = new PreAgendamentoUpdateViewModel ();
        if (isset($data['nome'])) {
            $preagendamento_update_vm->setNome($data['nome']);
        }
        return $preagendamento_update_vm;
    }

    public static function getPreAgendamentoFromPreAgendamentoUpdateVM (PreAgendamentoUpdateViewModel $preagendamento_update_vm) : PreAgendamento {
        $preagendamento = new PreAgendamento();
        if ($preagendamento_update_vm->getNome()) {
            $preagendamento->setNome($preagendamento_update_vm->getNome());
        }
        return $preagendamento;

    }
}
