#!/usr/bin/python

def numput(msg,default):
    try:
        input = raw_input
    except:
        pass
    num = None
    while not num:
        strnum = input(msg)
        if not strnum:
            num = default
        else:
            if '$' in strnum:
                strnum = strnum.replace('$','')
            div = 1
            if '%' in strnum:
                div = 100
                strnum = strnum.replace('%','')
            try:
                num = float(strnum)
            except:
                pass
            num = num/div
    return num

def calculate():
    loan = numput('price (300000) ? ',300000)
    rate = numput('interest (0.05) ? ', 0.05)
    period = numput('how many payment per year (26) ? [every month 12, every two week 26] : ',26)
    payment = numput('payment (600) ?',600)
    term = numput('ideal loan length in year (25) ? ',25)

    def how_many_year(rest=loan,payment=payment,cnt=1,interest_paid=0):
        interest_this_year = rest*rate
        ammortisment_this_year = period*payment
        if ammortisment_this_year < interest_this_year:
            return 'cant pay that thing','interest to high'
        rest = rest + interest_this_year - ammortisment_this_year
        if rest > 0:
            return how_many_year(rest,payment,cnt+1,interest_paid+interest_this_year)
        return cnt,interest_paid

    def how_much_should_you_pay():
        ideal_payment = payment
        nbyear,interest_paid  = how_many_year(loan,ideal_payment)
        while nbyear != term:
            if isinstance(nbyear,str) or nbyear > term:
                ideal_payment = ideal_payment + (ideal_payment/2)
            elif nbyear < term:
                ideal_payment = ideal_payment - (ideal_payment/4)
            nbyear,interest_paid = how_many_year(loan,ideal_payment)
        return ideal_payment, interest_paid

    def how_much_can_i_afford():
        ideal_loan = loan
        nbyear,interest_paid = how_many_year(ideal_loan,payment)
        while nbyear != term:
            if isinstance(nbyear,str) or nbyear > term:
                ideal_loan = ideal_loan - (ideal_payment/3)
            elif nbyear < term:
                ideal_loan = ideal_loan + (ideal_payment/2)
            nbyear,interest_paid = how_many_year(ideal_loan,payment)
        return ideal_loan,interest_paid


    year_of_payment,interest_paid_at_payment = how_many_year()
    ideal_payment,interest_paid_at_term = how_much_should_you_pay()
    ideal_loan,interest_idealy_paid = how_much_can_i_afford()
    print('''
    paid in %s years at %s$, %s$ for the bank
    ideal paid in %s years at %s$, %s$ for the bank
    ideal loan in %s years at %s$ is %s$ , %s$ for the bank
    '''% (year_of_payment,payment,interest_paid_at_payment,
          term,ideal_payment,interest_paid_at_term,
          term,payment,ideal_loan,interest_idealy_paid))

calculate()
