from app.bank.user_bank_accessor import UserBankAccessor
from app.cache.cache import Cache
from app.encryption.aes128 import AES128


class UserBank:
    def __init__(self, user_bank):
        self.user_bank = user_bank

    @classmethod
    def add_update_bank_details(cls, user_id, loan_application_id, applicant_type, account_number, bank_name, ifsc_code,
                                branch_name, beneficiary_id, name, karza_response):
        return UserBankAccessor.add_update_user_bank(
            loan_application_id=loan_application_id, name=name, applicant_type=applicant_type, user_id=user_id,
            account_number=account_number, bank_name=bank_name, ifsc_code=ifsc_code, branch_name=branch_name,
            beneficiary_id=beneficiary_id, karza_response=karza_response)

    def get_id(self):
        return self.user_bank.id

    @classmethod
    def get_bank(cls, loan_application_id):
        return UserBankAccessor.get_bank(loan_application_id)

    def get_bank_ifsc_code(self):
        return self.user_bank.ifsc_code

    def get_account_name(self):
        return self.user_bank.name

    def get_plaintext_account_number(self):
        return AES128.aes_cbc_decrypt(self.user_bank.account_number)

    def get_serialized_user_bank(self):
        return {
            'applicant_type': self.user_bank.applicant_type if self.user_bank else None,
            'beneficiary_id': self.user_bank.beneficiary_id if self.user_bank else None,
            'account_number': self.user_bank.account_number if self.user_bank else None,
            'bank_name': self.user_bank.bank_name if self.user_bank else None,
            'branch_name': self.user_bank.branch_name if self.user_bank else None,
            'ifsc_code': self.user_bank.ifsc_code if self.user_bank else None
        }
