// File: brashi[P]PetFera/src/./banco_dados.cpp
// Function: BancoDados::lerFuncionarios()
void BancoDados::lerFuncionarios() {
    if(!fs::exists(funcArq)) {
        cout << "Arquivo de funcionarios ainda não criado." << endl;
        cout << "Leitura cancelada..." << endl;
        return;
    }
    if(fs::is_empty(funcArq)) {
        cout << "Arquivo de funcionarios vazio." << endl;
        cout << "Leitura cancelada..." << endl;
        return;
    }

    ifstream arqDados(funcArq);
    if(arqDados.bad() || arqDados.fail()){
        throw "Arquivo de funcionarios inexistente ou corrompido.";
    }
    int count = 0;
    string temp;
    string linha;
    string palavra;
    vector<string> tokens;

    while(!arqDados.eof()) {
        tokens.clear();

        getline(arqDados, linha);
        stringstream s(linha);
        while(getline(s, palavra, ';')) {
            tokens.push_back(palavra);
        }

        if(tokens.size()) {
            if(tokens.at(0) == "vet") {
                petshop->adicionarVeterinario(make_shared<Veterinario>(
                    tokens.at(1),
                    tokens.at(2),
                    tokens.at(3),
                    tokens.at(4))
                );
            }
            if(tokens.at(0) == "trt") {
                petshop->adicionarTratador(make_shared<Tratador>(
                    tokens.at(1),
                    tokens.at(2),
                    tokens.at(3),
                    static_cast<Uniforme>(stoi(tokens.at(4)))
                ));
            }
            count++;
        }
    }

    arqDados.close();
    cout << "Arquivo de funcionários carregado com sucesso." << endl;
    cout << "Foram carregados " << count << " funcionários." << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x570, %rsp            # imm = 0x570
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rsi
movq %rsi, -0x4b0(%rbp)
addq $0x10, %rsi
leaq -0x30(%rbp), %rdi
movq %rdi, -0x4a8(%rbp)
movl $0x2, %edx
callq 0xaea0
movq -0x4a8(%rbp), %rdi
callq 0xae70
movb %al, -0x49d(%rbp)
jmp 0x8c67
movb -0x49d(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4b1(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xaf80
movb -0x4b1(%rbp), %al
testb $0x1, %al
jne 0x8c8a
jmp 0x8ced
movq 0x5a337(%rip), %rdi     # 0x62fc8
leaq 0x3756a(%rip), %rsi     # 0x40202
callq 0x6310
movq %rax, %rdi
movq 0x5a2f9(%rip), %rsi     # 0x62fa0
callq 0x6360
movq 0x5a315(%rip), %rdi     # 0x62fc8
leaq 0x37573(%rip), %rsi     # 0x4022d
callq 0x6310
movq %rax, %rdi
movq 0x5a2d7(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x932e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xaf80
jmp 0x9373
movq -0x4b0(%rbp), %rsi
addq $0x10, %rsi
leaq -0x68(%rbp), %rdi
movq %rdi, -0x4c0(%rbp)
movl $0x2, %edx
callq 0xaea0
movq -0x4c0(%rbp), %rdi
callq 0x6610
movb %al, -0x4b2(%rbp)
jmp 0x8d21
leaq -0x68(%rbp), %rdi
callq 0xaf80
movb -0x4b2(%rbp), %al
testb $0x1, %al
jne 0x8d36
jmp 0x8d99
movq 0x5a28b(%rip), %rdi     # 0x62fc8
leaq 0x374fe(%rip), %rsi     # 0x40242
callq 0x6310
movq %rax, %rdi
movq 0x5a24d(%rip), %rsi     # 0x62fa0
callq 0x6360
movq 0x5a269(%rip), %rdi     # 0x62fc8
leaq 0x374c7(%rip), %rsi     # 0x4022d
callq 0x6310
movq %rax, %rdi
movq 0x5a22b(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x932e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x68(%rbp), %rdi
callq 0xaf80
jmp 0x9373
movq -0x4b0(%rbp), %rsi
addq $0x10, %rsi
leaq -0x270(%rbp), %rdi
movl $0x8, %edx
callq 0x6540
movq -0x270(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x270(%rbp,%rax), %rdi
callq 0x65d0
movb %al, -0x4c1(%rbp)
jmp 0x8dd5
movb -0x4c1(%rbp), %al
testb $0x1, %al
jne 0x8e0d
jmp 0x8de1
movq -0x270(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x270(%rbp,%rax), %rdi
callq 0x6030
movb %al, -0x4c2(%rbp)
jmp 0x8e01
movb -0x4c2(%rbp), %al
testb $0x1, %al
jne 0x8e0d
jmp 0x8e4a
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x37440(%rip), %rax     # 0x40261
movq %rax, (%rdi)
movq 0x5a17d(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0x937c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x9367
movl $0x0, -0x274(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x6480
leaq -0x2b8(%rbp), %rdi
callq 0x6480
leaq -0x2d8(%rbp), %rdi
callq 0x6480
leaq -0x2f0(%rbp), %rdi
callq 0xbb40
movq -0x270(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x270(%rbp,%rax), %rdi
callq 0x65e0
movb %al, -0x4c3(%rbp)
jmp 0x8ea4
movb -0x4c3(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x8eb5
jmp 0x924b
leaq -0x2f0(%rbp), %rdi
callq 0xbb60
leaq -0x270(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x6090
jmp 0x8ed6
movl $0x10, %edi
movl $0x8, %esi
callq 0xbb80
movl %eax, -0x4c8(%rbp)
jmp 0x8eed
movl -0x4c8(%rbp), %edx
leaq -0x478(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x6530
jmp 0x8f08
jmp 0x8f0a
leaq -0x478(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
movl $0x3b, %edx
callq 0x65f0
movq %rax, -0x4d0(%rbp)
jmp 0x8f2b
movq -0x4d0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x6430
movb %al, -0x4d1(%rbp)
jmp 0x8f49
movb -0x4d1(%rbp), %al
testb $0x1, %al
jne 0x8f55
jmp 0x8f8e
leaq -0x2f0(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0xbba0
jmp 0x8f6a
jmp 0x8f0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x9337
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x923a
leaq -0x2f0(%rbp), %rdi
callq 0xbc10
cmpq $0x0, %rax
je 0x9229
xorl %eax, %eax
movl %eax, %esi
leaq -0x2f0(%rbp), %rdi
callq 0xbc60
movq %rax, -0x4e0(%rbp)
jmp 0x8fbd
movq -0x4e0(%rbp), %rdi
leaq 0x372c9(%rip), %rsi     # 0x40294
callq 0xbc30
movb %al, -0x4e1(%rbp)
jmp 0x8fd8
movb -0x4e1(%rbp), %al
testb $0x1, %al
jne 0x8fe7
jmp 0x90cc
movq -0x4b0(%rbp), %rdi
callq 0xb090
movq %rax, -0x4f8(%rbp)
leaq -0x2f0(%rbp), %rdi
movl $0x1, %esi
callq 0xbc60
movq %rax, -0x4f0(%rbp)
jmp 0x9014
leaq -0x2f0(%rbp), %rdi
movl $0x2, %esi
callq 0xbc60
movq %rax, -0x500(%rbp)
jmp 0x902e
leaq -0x2f0(%rbp), %rdi
movl $0x3, %esi
callq 0xbc60
movq %rax, -0x508(%rbp)
jmp 0x9048
leaq -0x2f0(%rbp), %rdi
movl $0x4, %esi
callq 0xbc60
movq %rax, -0x510(%rbp)
jmp 0x9062
movq -0x510(%rbp), %r8
movq -0x508(%rbp), %rcx
movq -0x500(%rbp), %rdx
movq -0x4f0(%rbp), %rsi
leaq -0x488(%rbp), %rdi
callq 0xbca0
jmp 0x908c
movq -0x4f8(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x1aaa0
jmp 0x90a1
leaq -0x488(%rbp), %rdi
callq 0xb4c0
jmp 0x90cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x488(%rbp), %rdi
callq 0xb4c0
jmp 0x923a
xorl %eax, %eax
movl %eax, %esi
leaq -0x2f0(%rbp), %rdi
callq 0xbc60
movq %rax, -0x518(%rbp)
jmp 0x90e5
movq -0x518(%rbp), %rdi
leaq 0x371a5(%rip), %rsi     # 0x40298
callq 0xbc30
movb %al, -0x519(%rbp)
jmp 0x9100
movb -0x519(%rbp), %al
testb $0x1, %al
jne 0x910f
jmp 0x921a
movq -0x4b0(%rbp), %rdi
callq 0xb090
movq %rax, -0x530(%rbp)
leaq -0x2f0(%rbp), %rdi
movl $0x1, %esi
callq 0xbc60
movq %rax, -0x528(%rbp)
jmp 0x913c
leaq -0x2f0(%rbp), %rdi
movl $0x2, %esi
callq 0xbc60
movq %rax, -0x538(%rbp)
jmp 0x9156
leaq -0x2f0(%rbp), %rdi
movl $0x3, %esi
callq 0xbc60
movq %rax, -0x540(%rbp)
jmp 0x9170
leaq -0x2f0(%rbp), %rdi
movl $0x4, %esi
callq 0xbc60
movq %rax, -0x548(%rbp)
jmp 0x918a
movq -0x548(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x54c(%rbp)
jmp 0x91a7
movq -0x540(%rbp), %rcx
movq -0x538(%rbp), %rdx
movq -0x528(%rbp), %rsi
movl -0x54c(%rbp), %eax
movl %eax, -0x49c(%rbp)
leaq -0x498(%rbp), %rdi
leaq -0x49c(%rbp), %r8
callq 0xbd30
jmp 0x91dd
movq -0x530(%rbp), %rdi
leaq -0x498(%rbp), %rsi
callq 0x1aad0
jmp 0x91f2
leaq -0x498(%rbp), %rdi
callq 0xb4a0
jmp 0x921a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x498(%rbp), %rdi
callq 0xb4a0
jmp 0x923a
movl -0x274(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x274(%rbp)
leaq -0x478(%rbp), %rdi
callq 0x6280
jmp 0x8e84
leaq -0x478(%rbp), %rdi
callq 0x6280
jmp 0x9337
leaq -0x270(%rbp), %rdi
callq 0x60b0
jmp 0x9259
movq 0x59d68(%rip), %rdi     # 0x62fc8
leaq 0x37035(%rip), %rsi     # 0x4029c
callq 0x6310
movq %rax, -0x558(%rbp)
jmp 0x9275
movq -0x558(%rbp), %rdi
movq 0x59d1d(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x928a
movq 0x59d37(%rip), %rdi     # 0x62fc8
leaq 0x37034(%rip), %rsi     # 0x402cc
callq 0x6310
movq %rax, -0x560(%rbp)
jmp 0x92a6
movq -0x560(%rbp), %rdi
movl -0x274(%rbp), %esi
callq 0x6580
movq %rax, -0x568(%rbp)
jmp 0x92c1
movq -0x568(%rbp), %rdi
leaq 0x36e3d(%rip), %rsi     # 0x4010c
callq 0x6310
movq %rax, -0x570(%rbp)
jmp 0x92dd
movq -0x570(%rbp), %rdi
movq 0x59cb5(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x92f2
leaq -0x2f0(%rbp), %rdi
callq 0xbe00
leaq -0x2d8(%rbp), %rdi
callq 0x6678
leaq -0x2b8(%rbp), %rdi
callq 0x6678
leaq -0x298(%rbp), %rdi
callq 0x6678
leaq -0x270(%rbp), %rdi
callq 0x60d0
addq $0x570, %rsp            # imm = 0x570
popq %rbp
retq
leaq -0x2f0(%rbp), %rdi
callq 0xbe00
leaq -0x2d8(%rbp), %rdi
callq 0x6678
leaq -0x2b8(%rbp), %rdi
callq 0x6678
leaq -0x298(%rbp), %rdi
callq 0x6678
leaq -0x270(%rbp), %rdi
callq 0x60d0
movq -0x38(%rbp), %rdi
callq 0x6590
nopl (%rax)