// File: 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
subq $0x3b0, %rsp            # imm = 0x3B0
movq %rsi, -0x2e0(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x2d8(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x4280
leaq -0x60(%rbp), %rdi
callq 0x4280
leaq -0x1e8(%rbp), %rdi
callq 0x4160
jmp 0x1e3b5
movq 0x3dc0c(%rip), %rdi     # 0x5bfc8
leaq 0x29948(%rip), %rsi     # 0x47d0b
callq 0x41c0
movq %rax, -0x2e8(%rbp)
jmp 0x1e3d1
movq -0x2e8(%rbp), %rdi
leaq 0x285c2(%rip), %rsi     # 0x469a1
callq 0x41c0
movq %rax, -0x2f0(%rbp)
jmp 0x1e3ed
movq -0x2f0(%rbp), %rdi
leaq 0x2992a(%rip), %rsi     # 0x47d25
callq 0x41c0
movq %rax, -0x2f8(%rbp)
jmp 0x1e409
movq -0x2f8(%rbp), %rdi
leaq 0x2858a(%rip), %rsi     # 0x469a1
callq 0x41c0
movq %rax, -0x300(%rbp)
jmp 0x1e425
movq -0x300(%rbp), %rdi
leaq 0x29912(%rip), %rsi     # 0x47d45
callq 0x41c0
movq %rax, -0x308(%rbp)
jmp 0x1e441
movq -0x308(%rbp), %rdi
leaq 0x28552(%rip), %rsi     # 0x469a1
callq 0x41c0
movq %rax, -0x310(%rbp)
jmp 0x1e45d
movq -0x310(%rbp), %rdi
leaq 0x298f1(%rip), %rsi     # 0x47d5c
callq 0x41c0
movq %rax, -0x318(%rbp)
jmp 0x1e479
movq -0x318(%rbp), %rdi
leaq 0x2851a(%rip), %rsi     # 0x469a1
callq 0x41c0
movq %rax, -0x320(%rbp)
jmp 0x1e495
movq -0x320(%rbp), %rdi
leaq 0x298ce(%rip), %rsi     # 0x47d71
callq 0x41c0
movq %rax, -0x328(%rbp)
jmp 0x1e4b1
movq -0x328(%rbp), %rdi
leaq 0x284e2(%rip), %rsi     # 0x469a1
callq 0x41c0
movq %rax, -0x330(%rbp)
jmp 0x1e4cd
movq -0x330(%rbp), %rdi
leaq 0x298ba(%rip), %rsi     # 0x47d95
callq 0x41c0
movq %rax, -0x338(%rbp)
jmp 0x1e4e9
movq -0x338(%rbp), %rdi
movq 0x3dab9(%rip), %rsi     # 0x5bfb0
callq 0x41f0
jmp 0x1e4fe
movq -0x2e0(%rbp), %rdi
callq 0x7950
movq %rax, %rdi
callq 0xab30
movl %eax, -0x33c(%rbp)
jmp 0x1e51a
movl -0x33c(%rbp), %eax
cmpl $0x0, %eax
jne 0x1e589
movq 0x3da9c(%rip), %rdi     # 0x5bfc8
leaq 0x29879(%rip), %rsi     # 0x47dac
callq 0x41c0
movq %rax, -0x348(%rbp)
jmp 0x1e541
movq -0x348(%rbp), %rdi
movq 0x3da61(%rip), %rsi     # 0x5bfb0
callq 0x41f0
jmp 0x1e556
jmp 0x1e5e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
jmp 0x1eb2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
jmp 0x1eb1f
movq -0x2e0(%rbp), %rdi
callq 0x7950
movq %rax, %rdi
callq 0xab30
movl %eax, -0x34c(%rbp)
jmp 0x1e5a5
movl -0x34c(%rbp), %eax
cmpl $0x1, %eax
jne 0x1e5e3
movq 0x3da11(%rip), %rdi     # 0x5bfc8
leaq 0x29811(%rip), %rsi     # 0x47dcf
callq 0x41c0
movq %rax, -0x358(%rbp)
jmp 0x1e5cc
movq -0x358(%rbp), %rdi
movq 0x3d9d6(%rip), %rsi     # 0x5bfb0
callq 0x41f0
jmp 0x1e5e1
jmp 0x1e5e3
jmp 0x1e5e5
movq 0x3d9f4(%rip), %rdi     # 0x5bfe0
leaq -0x60(%rbp), %rsi
callq 0x4240
jmp 0x1e5f7
leaq -0x1d8(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x41b0
jmp 0x1e609
leaq -0x1e8(%rbp), %rdi
leaq -0x3c(%rbp), %rsi
callq 0x4050
jmp 0x1e61b
movq 0x3d9a6(%rip), %rdi     # 0x5bfc8
leaq 0x297ca(%rip), %rsi     # 0x47df3
callq 0x41c0
movq %rax, -0x360(%rbp)
jmp 0x1e637
movq -0x360(%rbp), %rdi
leaq 0x2835c(%rip), %rsi     # 0x469a1
callq 0x41c0
jmp 0x1e64c
movswl -0x3c(%rbp), %eax
cmpl $0x1, %eax
jne 0x1e6ee
movq 0x3d968(%rip), %rdi     # 0x5bfc8
leaq 0x2979e(%rip), %rsi     # 0x47e05
callq 0x41c0
jmp 0x1e66e
movq 0x3d96b(%rip), %rdi     # 0x5bfe0
leaq -0x38(%rbp), %rsi
callq 0x4240
jmp 0x1e680
movq -0x2e0(%rbp), %rdi
callq 0x7950
movq %rax, -0x368(%rbp)
leaq -0x218(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x40e0
jmp 0x1e6a5
movq -0x368(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0xabb0
jmp 0x1e6ba
leaq -0x218(%rbp), %rdi
callq 0x4140
jmp 0x1eae5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x4140
jmp 0x1eb1f
movswl -0x3c(%rbp), %eax
cmpl $0x2, %eax
jne 0x1e790
movq 0x3d8c6(%rip), %rdi     # 0x5bfc8
leaq 0x29711(%rip), %rsi     # 0x47e1a
callq 0x41c0
jmp 0x1e710
movq 0x3d8c9(%rip), %rdi     # 0x5bfe0
leaq -0x38(%rbp), %rsi
callq 0x4240
jmp 0x1e722
movq -0x2e0(%rbp), %rdi
callq 0x7950
movq %rax, -0x370(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x40e0
jmp 0x1e747
movq -0x370(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0xabe0
jmp 0x1e75c
leaq -0x238(%rbp), %rdi
callq 0x4140
jmp 0x1eae3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x4140
jmp 0x1eb1f
movswl -0x3c(%rbp), %eax
cmpl $0x3, %eax
jne 0x1e832
movq 0x3d824(%rip), %rdi     # 0x5bfc8
leaq 0x29683(%rip), %rsi     # 0x47e2e
callq 0x41c0
jmp 0x1e7b2
movq 0x3d827(%rip), %rdi     # 0x5bfe0
leaq -0x38(%rbp), %rsi
callq 0x4240
jmp 0x1e7c4
movq -0x2e0(%rbp), %rdi
callq 0x7950
movq %rax, -0x378(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x40e0
jmp 0x1e7e9
movq -0x378(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0xac30
jmp 0x1e7fe
leaq -0x258(%rbp), %rdi
callq 0x4140
jmp 0x1eae1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x4140
jmp 0x1eb1f
movswl -0x3c(%rbp), %eax
cmpl $0x4, %eax
jne 0x1e8d4
movq 0x3d782(%rip), %rdi     # 0x5bfc8
leaq 0x295f6(%rip), %rsi     # 0x47e43
callq 0x41c0
jmp 0x1e854
movq 0x3d785(%rip), %rdi     # 0x5bfe0
leaq -0x38(%rbp), %rsi
callq 0x4240
jmp 0x1e866
movq -0x2e0(%rbp), %rdi
callq 0x7950
movq %rax, -0x380(%rbp)
leaq -0x278(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x40e0
jmp 0x1e88b
movq -0x380(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0xac60
jmp 0x1e8a0
leaq -0x278(%rbp), %rdi
callq 0x4140
jmp 0x1eadf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x4140
jmp 0x1eb1f
movswl -0x3c(%rbp), %eax
cmpl $0x5, %eax
jne 0x1e9fc
leaq -0x299(%rbp), %rdi
movq %rdi, -0x388(%rbp)
callq 0x4330
movq -0x388(%rbp), %rdx
leaq 0x29557(%rip), %rsi     # 0x47e59
leaq -0x298(%rbp), %rdi
callq 0x4270
jmp 0x1e910
movq -0x2d8(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0x14520
movb %al, -0x389(%rbp)
jmp 0x1e92b
movb -0x389(%rbp), %al
andb $0x1, %al
movb %al, -0x39(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x4140
leaq -0x299(%rbp), %rdi
callq 0x4200
movq -0x2e0(%rbp), %rsi
leaq -0x2b0(%rbp), %rdi
movq %rdi, -0x398(%rbp)
callq 0x223c0
movq -0x398(%rbp), %rdi
callq 0x22450
movq %rax, %rdi
movzbl -0x39(%rbp), %esi
andl $0x1, %esi
callq 0xa490
jmp 0x1e985
leaq -0x2b0(%rbp), %rdi
callq 0x1eed0
jmp 0x1eadd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
jmp 0x1e9c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x4140
leaq -0x299(%rbp), %rdi
callq 0x4200
jmp 0x1eb1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x1eed0
jmp 0x1eb1f
movswl -0x3c(%rbp), %eax
cmpl $0x6, %eax
jne 0x1eaa2
movq 0x3d5b8(%rip), %rdi     # 0x5bfc8
leaq 0x2945f(%rip), %rsi     # 0x47e76
callq 0x41c0
jmp 0x1ea1e
movq -0x2d8(%rbp), %rdi
callq 0x1d190
movl %eax, -0x39c(%rbp)
jmp 0x1ea32
movq -0x2e0(%rbp), %rsi
movl -0x39c(%rbp), %eax
movl %eax, -0x2b4(%rbp)
leaq -0x2c8(%rbp), %rdi
movq %rdi, -0x3a8(%rbp)
callq 0x22470
movq -0x3a8(%rbp), %rdi
callq 0x22500
movq %rax, %rdi
movl -0x2b4(%rbp), %esi
callq 0x9f50
jmp 0x1ea74
leaq -0x2c8(%rbp), %rdi
callq 0x1edd0
jmp 0x1eadb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
leaq -0x2c8(%rbp), %rdi
callq 0x1edd0
jmp 0x1eb1f
movswl -0x3c(%rbp), %eax
cmpl $0x0, %eax
je 0x1eab4
movswl -0x3c(%rbp), %eax
cmpl $0x4, %eax
jle 0x1ead9
movq 0x3d50d(%rip), %rdi     # 0x5bfc8
leaq 0x293c9(%rip), %rsi     # 0x47e8b
callq 0x41c0
jmp 0x1eac9
movb $0x0, -0x1(%rbp)
movl $0x1, -0x2cc(%rbp)
jmp 0x1eaf3
jmp 0x1eadb
jmp 0x1eadd
jmp 0x1eadf
jmp 0x1eae1
jmp 0x1eae3
jmp 0x1eae5
movb $0x1, -0x1(%rbp)
movl $0x1, -0x2cc(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x4170
leaq -0x60(%rbp), %rdi
callq 0x4140
leaq -0x38(%rbp), %rdi
callq 0x4140
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x3b0, %rsp            # imm = 0x3B0
popq %rbp
retq
leaq -0x1e8(%rbp), %rdi
callq 0x4170
leaq -0x60(%rbp), %rdi
callq 0x4140
leaq -0x38(%rbp), %rdi
callq 0x4140
movq -0x1f0(%rbp), %rdi
callq 0x4320
nopl (%rax)