import random

from banking.models.account import Account


def generate_account_number() -> str:
    random_number = "{:010d}".format(random.randint(0, 9999999999))
    return random_number


def generate_account_iban() -> str:
    country_code = "SK"
    bank_code = "1100"
    account_prefix = "000000"
    account_number = generate_account_number()

    iban = f"{bank_code}{account_prefix}{account_number}"
    check_digits = "{:02d}".format(98 - (int(iban) * 100 % 97))

    iban = f"{country_code}{check_digits}{bank_code}{account_prefix}{account_number}"

    if iban in [account.iban for account in Account.objects.all()]:
        return generate_account_iban()
    else:
        return iban
