// File: /workspace/github_cpp_makefile_star2_O2/viniciu21[P]PetLolja/./src/PetFera.cpp
// Function: Petfera::atualizar_funcionario(std::shared_ptr<Funcionario>)
bool Petfera::atualizar_funcionario(std::shared_ptr<Funcionario> funcionario)
{
	string alterar_string;
	bool alterar_bool;
	short escolha;
	string escolha_str;
	stringstream ss;

	cout << "o que vc quer atualizar? "
			 << "\n"
			 << "# Temos as seguintes opcao : # "
			 << "\n"
			 << "    1 -> Alterar nome "
			 << "\n"
			 << "    2 -> Alterar cpf"
			 << "\n"
			 << "    3 -> Alterar numero do telefone"
			 << "\n"
			 << "    4 -> Alterar email"
			 << endl;

	if (funcionario->getClassicicacao() == Veterinario)
	{
		cout << "    5 -> Alterar inscricao no CRMV" << endl;
	}
	else if (funcionario->getClassicicacao() == Tratador)
	{
		cout << "    6 -> Alterar nivel de seguranca" << endl;
	}

	cin >> escolha_str;
	ss << escolha_str;
	ss >> escolha;

	cout << "Escolha uma opcao"
			 << "\n";

	if (escolha == 1)
	{
		cout << "Digite o novo nome \n";

		cin >> alterar_string;

		funcionario->setNome(alterar_string);
	}
	else if (escolha == 2)
	{
		cout << "Digite o novo cpf \n";

		cin >> alterar_string;

		funcionario->setCpf(alterar_string);
	}
	else if (escolha == 3)
	{
		cout << "Digite o novo cell \n";

		cin >> alterar_string;

		funcionario->setCelularProfissional(alterar_string);
	}
	else if (escolha == 4)
	{
		cout << "Digite o novo email \n";

		cin >> alterar_string;

		funcionario->setEmail(alterar_string);
	}
	else if (escolha == 5)
	{
		alterar_bool = leBool("Possui inscricao CRMV? [S/N]");

		shared_ptr<FuncionarioVeterinario> func_vet = dynamic_pointer_cast<FuncionarioVeterinario>(funcionario);

		func_vet->setIsInscritoCRMV(alterar_bool);
	}
	else if (escolha == 6)
	{
		cout << "Digite o novo nivel\n";

		nivelDeSeguranca seguranca = leNivelDeSeguranca();

		shared_ptr<FuncionarioTratador> func_trat = dynamic_pointer_cast<FuncionarioTratador>(funcionario);

		func_trat->setClassificacaoDeSeguranca(seguranca);
	}
	else if (escolha == 0 || escolha > 4)
	{
		cout << "Erro, escolha apenas entre os valores informados";
		return false;
	}

	return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x288, %rsp            # imm = 0x288
movq %rsi, %rbx
leaq -0x40(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq -0x60(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
leaq -0x298(%rbp), %rdi
callq 0x4140
movq 0x1c144(%rip), %rdi     # 0x2efc8
leaq 0xdecd(%rip), %rsi      # 0x20d58
callq 0x41a0
leaq 0xcb7a(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xdecc(%rip), %rsi      # 0x20d72
movq %rax, %rdi
callq 0x41a0
leaq 0xcb5c(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xdece(%rip), %rsi      # 0x20d92
movq %rax, %rdi
callq 0x41a0
leaq 0xcb3e(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xdec7(%rip), %rsi      # 0x20da9
movq %rax, %rdi
callq 0x41a0
leaq 0xcb20(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xdebe(%rip), %rsi      # 0x20dbe
movq %rax, %rdi
callq 0x41a0
leaq 0xcb02(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xdec4(%rip), %rsi      # 0x20de2
movq %rax, %rdi
callq 0x41a0
movq %rax, %rdi
callq 0x40f0
movq (%rbx), %rdi
callq 0x84ea
testl %eax, %eax
je 0x12f50
movq (%rbx), %rdi
callq 0x84ea
cmpl $0x1, %eax
jne 0x12f6b
leaq 0xdece(%rip), %rsi      # 0x20e1c
jmp 0x12f57
leaq 0xdea2(%rip), %rsi      # 0x20df9
movq 0x1c06a(%rip), %rdi     # 0x2efc8
callq 0x41a0
movq %rax, %rdi
callq 0x40f0
movq 0x1c06e(%rip), %rdi     # 0x2efe0
leaq -0x70(%rbp), %rsi
callq 0x41f0
leaq -0x288(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x4190
leaq -0x298(%rbp), %rdi
leaq -0x1a(%rbp), %rsi
callq 0x4040
movq 0x1c026(%rip), %rdi     # 0x2efc8
leaq 0xde97(%rip), %rsi      # 0x20e40
callq 0x41a0
leaq 0xca5c(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
movzwl -0x1a(%rbp), %eax
leal -0x1(%rax), %ecx
cmpl $0x5, %ecx
ja 0x131e0
leaq 0xc8d4(%rip), %rax      # 0x1f8a8
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x1bfe4(%rip), %rdi     # 0x2efc8
leaq 0xde67(%rip), %rsi      # 0x20e52
callq 0x41a0
movq 0x1bfe9(%rip), %rdi     # 0x2efe0
leaq -0x50(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0x110(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x4210
leaq -0x110(%rbp), %rsi
movq %rbx, %rdi
callq 0x852c
leaq -0x110(%rbp), %rdi
jmp 0x1316b
leaq 0xde71(%rip), %rsi      # 0x20ea6
leaq -0x90(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x40b0
leaq -0x90(%rbp), %rsi
callq 0xd44e
movl %eax, %r14d
leaq -0x90(%rbp), %rdi
callq 0x40e0
leaq -0x30(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x13fa8
movq (%r15), %rdi
movzbl %r14b, %esi
callq 0x805e
jmp 0x131a7
movq 0x1bf41(%rip), %rdi     # 0x2efc8
leaq 0xdded(%rip), %rsi      # 0x20e7b
callq 0x41a0
movq 0x1bf46(%rip), %rdi     # 0x2efe0
leaq -0x50(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0xd0(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x4210
leaq -0xd0(%rbp), %rsi
movq %rbx, %rdi
callq 0x8552
leaq -0xd0(%rbp), %rdi
jmp 0x1316b
movq 0x1bef0(%rip), %rdi     # 0x2efc8
leaq 0xddb1(%rip), %rsi      # 0x20e90
callq 0x41a0
movq 0x1bef5(%rip), %rdi     # 0x2efe0
leaq -0x50(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0xb0(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x4210
leaq -0xb0(%rbp), %rsi
movq %rbx, %rdi
callq 0x8560
leaq -0xb0(%rbp), %rdi
jmp 0x1316b
movq 0x1bea2(%rip), %rdi     # 0x2efc8
leaq 0xdd3a(%rip), %rsi      # 0x20e67
callq 0x41a0
movq 0x1bea7(%rip), %rdi     # 0x2efe0
leaq -0x50(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0xf0(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x4210
leaq -0xf0(%rbp), %rsi
movq %rbx, %rdi
callq 0x853a
leaq -0xf0(%rbp), %rdi
callq 0x40e0
jmp 0x131b0
movq 0x1be4f(%rip), %rdi     # 0x2efc8
leaq 0xdd43(%rip), %rsi      # 0x20ec3
callq 0x41a0
callq 0x12510
movl %eax, %r14d
leaq -0x30(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x13ffd
movq (%r15), %rdi
movl %r14d, %esi
callq 0x7cca
leaq -0x28(%rbp), %rdi
callq 0x4c0e
movb $0x1, %bl
leaq -0x298(%rbp), %rdi
callq 0x4150
leaq -0x70(%rbp), %rdi
callq 0x40e0
leaq -0x50(%rbp), %rdi
callq 0x40e0
movl %ebx, %eax
addq $0x288, %rsp            # imm = 0x288
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
testw %ax, %ax
setne %cl
cmpw $0x5, %ax
setl %al
movb $0x1, %bl
testb %al, %cl
jne 0x131b2
movq 0x1bdce(%rip), %rdi     # 0x2efc8
leaq 0xdcd7(%rip), %rsi      # 0x20ed8
callq 0x41a0
xorl %ebx, %ebx
jmp 0x131b2
movq %rax, %rbx
leaq -0xf0(%rbp), %rdi
jmp 0x13256
movq %rax, %rbx
leaq -0x110(%rbp), %rdi
jmp 0x13256
movq %rax, %rbx
leaq -0xb0(%rbp), %rdi
jmp 0x13256
movq %rax, %rbx
leaq -0xd0(%rbp), %rdi
jmp 0x13256
jmp 0x1323c
movq %rax, %rbx
leaq -0x28(%rbp), %rdi
callq 0x4c0e
jmp 0x13267
jmp 0x13264
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x40e0
jmp 0x13267
jmp 0x13264
movq %rax, %rbx
jmp 0x13273
movq %rax, %rbx
leaq -0x298(%rbp), %rdi
callq 0x4150
leaq -0x70(%rbp), %rdi
callq 0x40e0
leaq -0x50(%rbp), %rdi
callq 0x40e0
movq %rbx, %rdi
callq 0x42c0
nop