# save as tmp_summary.py and run: python tmp_summary.py
import os, django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'branch_system.settings')
django.setup()

from accounting.models import Account, GeneralLedger, JournalEntry, FiscalPeriod
from accounting.services.accounting_service import AccountingService
from decimal import Decimal
from datetime import date

svc = AccountingService()
today = date.today()

key = [('1010','Cash and Bank'),('1020','Loan Portfolio'),('4010','Interest Income'),('3010','Share Capital'),('3020','Retained Earnings')]
print('Key Account Balances:')
for code, label in key:
    try:
        acc = Account.objects.get(code=code)
        bal = svc.calculate_account_balance(acc, today, None)
        print(f'  {code}  {label:<25} KES {bal:>15,.2f}')
    except Account.DoesNotExist:
        print(f'  {code}  {label:<25} (not found)')

total_assets = sum(svc.calculate_account_balance(a, today, None) for a in Account.objects.filter(account_type='asset', is_active=True))
total_liab   = sum(svc.calculate_account_balance(a, today, None) for a in Account.objects.filter(account_type='liability', is_active=True))
total_equity = sum(svc.calculate_account_balance(a, today, None) for a in Account.objects.filter(account_type='equity', is_active=True))
total_income = sum(svc.calculate_account_balance(a, today, None) for a in Account.objects.filter(account_type='income', is_active=True))
balanced = abs(total_assets - (total_liab + total_equity)) < Decimal('0.01')

print()
print(f'GL entries total:       {GeneralLedger.objects.count()}')
print(f'Posted journal entries: {JournalEntry.objects.filter(status="posted").count()}')
print(f'Open fiscal periods:    {FiscalPeriod.objects.filter(status="open").count()}')
print()
print(f'Total Assets:     KES {total_assets:>15,.2f}')
print(f'Total Liabilities:KES {total_liab:>15,.2f}')
print(f'Total Equity:     KES {total_equity:>15,.2f}')
print(f'Total Income:     KES {total_income:>15,.2f}')
diff = total_assets - (total_liab + total_equity)
status = "BALANCED" if balanced else "NEEDS equity entry"
print(f'SFP Difference:   KES {diff:>15,.2f}  -- {status}')
