"""
FUDO ERP - Comprehensive Transaction Simulation
Simulates the full accounting cycle: chart of accounts, products, invoices, payments, shipments, etc.
Run from: d:\FUDO\erp\apps\backend
Usage: python manage.py shell < simulate_transactions.py
"""
import os
import sys
from decimal import Decimal
from datetime import date, timedelta

# Setup
sys.path.insert(0, 'd:/FUDO/erp/apps/backend')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

import django
django.setup()

from django.utils import timezone
from modules.authentication.models import User
from modules.erp.models import (
    Account, JournalEntry, JournalItem, Product, Warehouse,
    StockMove, Invoice, InvoiceLine, Shipment
)
from modules.erp.services import ERPService
from modules.crm.models import Company, Contact, Deal, Pipeline, Stage
from modules.logistics.models import WarehouseReceipt, ShippingQuote, FreightQuote
from modules.hr.models import Employee, Leave, PayrollRun, Payslip
from modules.trucking.models import Vehicle, Driver, FuelLog, Trip
from modules.customs.models import CustomsEntry, DutyRate

# ── Get current user & tenant ─────────────────────────────────────────────────
user = User.objects.filter(email__iexact='jusmedina@gmail.com').first() or \
       User.objects.filter(email__iexact='admin@fudo.local').first() or \
       User.objects.filter(is_superuser=True).first()

if not user:
    print("❌ No user found. Run Django first and create a user.")
    sys.exit(1)

tenant_id = user.tenant_id
print(f"✅ User: {user.email} | Tenant: {tenant_id}")

# ── 1. Chart of Accounts ────────────────────────────────────────────────────
print("\n" + "="*70)
print("1. CHART OF ACCOUNTS")
print("="*70)
ERPService.get_or_create_chart_of_accounts(tenant_id)
accounts = Account.objects.filter(tenant_id=tenant_id).order_by('code')
for a in accounts:
    print(f"  [{a.code}] {a.name:<35} {a.type}")
print(f"  Total accounts: {accounts.count()}")

# ── 2. Products ──────────────────────────────────────────────────────────────
print("\n" + "="*70)
print("2. PRODUCTS / INVENTORY")
print("="*70)
product_data = [
    ("SKU001", "International Freight Service", "Service", Decimal("1000.00"), Decimal("1500.00"), Decimal("0.00")),
    ("SKU002", "Customs Brokerage Service", "Service", Decimal("500.00"), Decimal("800.00"), Decimal("0.00")),
    ("SKU003", "Warehousing (per pallet/month)", "Service", Decimal("50.00"), Decimal("100.00"), Decimal("0.00")),
    ("SKU004", "Trucking - Local Delivery", "Service", Decimal("200.00"), Decimal("350.00"), Decimal("0.00")),
    ("SKU005", "Cargo Insurance", "Service", Decimal("100.00"), Decimal("150.00"), Decimal("12.00")),
    ("SKU006", "Pharmaceutical Freight (Air)", "Service", Decimal("2000.00"), Decimal("3500.00"), Decimal("0.00")),
    ("SKU007", "Hazardous Materials Handling", "Service", Decimal("500.00"), Decimal("900.00"), Decimal("0.00")),
    ("SKU008", "Cold Chain Logistics", "Service", Decimal("800.00"), Decimal("1200.00"), Decimal("0.00")),
]
for sku, name, cat, cost, sell, tax in product_data:
    p, created = Product.objects.get_or_create(
        tenant_id=tenant_id, sku=sku,
        defaults=dict(name=name, category=cat, cost_price=cost, selling_price=sell, tax_rate=tax)
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {sku} - {name} | Sell: {sell} | Tax: {tax}%")
print(f"  Total products: {Product.objects.filter(tenant_id=tenant_id).count()}")

# ── 3. Warehouse ─────────────────────────────────────────────────────────────
print("\n" + "="*70)
print("3. WAREHOUSES")
print("="*70)
warehouses_data = [
    ("WH-MNL-01", "Manila Main Warehouse", "Metro Manila, Philippines"),
    ("WH-宿雾-01", "Cebu Logistics Hub", "Cebu, Philippines"),
    ("WH-DVO-01", "Davao Distribution Center", "Davao, Philippines"),
]
for code, name, addr in warehouses_data:
    w, created = Warehouse.objects.get_or_create(
        tenant_id=tenant_id, code=code,
        defaults=dict(name=name, address=addr, is_active=True)
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: [{code}] {name} - {addr}")
print(f"  Total warehouses: {Warehouse.objects.filter(tenant_id=tenant_id).count()}")

# ── 4. Stock Moves ───────────────────────────────────────────────────────────
print("\n" + "="*70)
print("4. STOCK MOVES (Inventory)")
print("="*70)
wh_main = Warehouse.objects.filter(tenant_id=tenant_id, code='WH-MNL-01').first()
products = list(Product.objects.filter(tenant_id=tenant_id)[:3])
if wh_main and products:
    for i, prod in enumerate(products):
        sm, created = StockMove.objects.get_or_create(
            tenant_id=tenant_id,
            product=prod,
            source_warehouse=None,
            dest_warehouse=wh_main,
            move_type='INCOMING',
            reference_doc=f"INIT-STOCK-{prod.sku}",
            defaults=dict(
                quantity=Decimal(f"{100 + i * 50}"),
                unit_cost=prod.cost_price,
            )
        )
        status = "✅ Created" if created else "🔄 Exists"
        print(f"  {status}: {prod.sku} → {wh_main.code} | Qty: {sm.quantity} × {sm.unit_cost}")
print(f"  Total stock moves: {StockMove.objects.filter(tenant_id=tenant_id).count()}")

# ── 5. Shipping & Freight Quotes ─────────────────────────────────────────────
print("\n" + "="*70)
print("5. SHIPPING & FREIGHT QUOTES")
print("="*70)
sq_data = [
    dict(quote_number="SQ-2024-001", carrier="2GO", service_type="Sea Freight",
         origin="Manila", destination="Cebu", weight_kg=Decimal("500.00"),
         volume_m3=Decimal("2.00"), estimated_cost=Decimal("2500.00"),
         currency="PHP", valid_until=date.today() + timedelta(days=14), status="PENDING"),
    dict(quote_number="SQ-2024-002", carrier="LBC", service_type="Air Freight",
         origin="Manila", destination="Davao", weight_kg=Decimal("50.00"),
         volume_m3=Decimal("0.50"), estimated_cost=Decimal("4500.00"),
         currency="PHP", valid_until=date.today() + timedelta(days=7), status="PENDING"),
]
for data in sq_data:
    sq, created = ShippingQuote.objects.get_or_create(
        tenant_id=tenant_id, quote_number=data['quote_number'],
        defaults=dict(**data, is_active=True)
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {sq.quote_number} | {sq.carrier} {sq.service_type} | {sq.origin} → {sq.destination} | ₱{sq.estimated_cost}")

fq_data = [
    dict(quote_number="FQ-2024-001", carrier="Philex", route="Manila-Cebu",
         container_type="20ft", estimated_cost=Decimal("15000.00"),
         currency="PHP", valid_until=date.today() + timedelta(days=10), status="PENDING"),
    dict(quote_number="FQ-2024-002", carrier="G nucleotide", route="Manila-Davao",
         container_type="40ft", estimated_cost=Decimal("28000.00"),
         currency="PHP", valid_until=date.today() + timedelta(days=10), status="PENDING"),
]
for data in fq_data:
    fq, created = FreightQuote.objects.get_or_create(
        tenant_id=tenant_id, quote_number=data['quote_number'],
        defaults=dict(**data, is_active=True)
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {fq.quote_number} | {fq.carrier} {fq.container_type} | {fq.route} | ₱{fq.estimated_cost}")

# ── 6. Shipments ─────────────────────────────────────────────────────────────
print("\n" + "="*70)
print("6. SHIPMENTS")
print("="*70)
shipment_data = [
    dict(reference_number="SHP-INIT-001", shipment_type="IMPORT",
         status="IN_TRANSIT", origin="Shanghai, China", destination="Manila, PH",
         carrier="COSCO", estimated_arrival=date.today() + timedelta(days=14),
         declared_value=Decimal("50000.00"), duty_amount=Decimal("5000.00"),
         freight_amount=Decimal("2500.00"), currency="USD"),
    dict(reference_number="SHP-INIT-002", shipment_type="EXPORT",
         status="DELIVERED", origin="Manila, PH", destination="Los Angeles, USA",
         carrier="Maersk", estimated_arrival=date.today() - timedelta(days=2),
         declared_value=Decimal("75000.00"), duty_amount=Decimal("0.00"),
         freight_amount=Decimal("5000.00"), currency="USD"),
    dict(reference_number="SHP-INIT-003", shipment_type="TRANSIT",
         status="PENDING", origin="Hong Kong", destination="Manila, PH",
         carrier="Yang Ming", estimated_arrival=date.today() + timedelta(days=7),
         declared_value=Decimal("30000.00"), duty_amount=Decimal("3000.00"),
         freight_amount=Decimal("1800.00"), currency="USD"),
]
for data in shipment_data:
    s, created = Shipment.objects.get_or_create(
        tenant_id=tenant_id, reference_number=data['reference_number'],
        defaults=dict(**data)
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {s.reference_number} | {s.shipment_type} | {s.status} | {s.origin} → {s.destination}")
print(f"  Total shipments: {Shipment.objects.filter(tenant_id=tenant_id).count()}")

# ── 7. CRM - Companies, Contacts, Deals ─────────────────────────────────────
print("\n" + "="*70)
print("7. CRM - COMPANIES, CONTACTS & DEALS")
print("="*70)
companies_data = [
    ("JLM Brokerage Corp", "jlm-brokerage.com", "Logistics", "+63-2-8123-4567", "Metro Manila"),
    ("Medina Pharma Inc", "medina-pharma.com", "Pharmaceutical", "+63-2-8123-4568", "Makati City"),
    ("Global Freight Solutions", "globalfreight.com", "Freight Forwarding", "+1-212-555-0100", "New York, USA"),
    ("Pacific Trading Co", "pacifictrading.com", "Trading", "+65-6324-5678", "Singapore"),
    ("Kintampo Logistics", "kintampo-logistics.com", "Logistics", "+233-32-123-4567", "Ghana"),
]
for name, domain, industry, phone, city in companies_data:
    c, created = Company.objects.get_or_create(
        tenant_id=tenant_id, name=name,
        defaults=dict(domain=domain, industry=industry, phone=phone, city=city, country='Philippines')
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {c.name} | {c.industry} | {c.city}")

# Get or create pipeline
pipeline, _ = Pipeline.objects.get_or_create(
    tenant_id=tenant_id, name="Sales Pipeline",
    defaults=dict(description="Default sales pipeline", is_active=True)
)
stage_won, _ = Stage.objects.get_or_create(
    tenant_id=tenant_id, pipeline=pipeline, name="Won",
    defaults=dict(order=1, probability=Decimal("100.00"))
)
stage_open, _ = Stage.objects.get_or_create(
    tenant_id=tenant_id, pipeline=pipeline, name="Qualified",
    defaults=dict(order=2, probability=Decimal("50.00"))
)

companies = list(Company.objects.filter(tenant_id=tenant_id)[:3])
deals_data = [
    ("JLM - Q4 Freight Contract", Decimal("150000.00"), "USD", stage_won, companies[0] if companies else None),
    ("Medina Pharma - Cold Chain Setup", Decimal("85000.00"), "USD", stage_open, companies[1] if len(companies) > 1 else None),
    ("Global Freight - Customs Brokerage", Decimal("45000.00"), "PHP", stage_won, companies[2] if len(companies) > 2 else None),
]
for title, value, curr, stage, company in deals_data:
    d, created = Deal.objects.get_or_create(
        tenant_id=tenant_id, title=title,
        defaults=dict(value=value, currency=curr, status=stage.name,
                      pipeline=pipeline, stage=stage, company=company,
                      assigned_to=user, expected_close_date=date.today() + timedelta(days=30))
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {d.title} | ₱{d.value} {d.currency} | {d.status}")
print(f"  Total deals: {Deal.objects.filter(tenant_id=tenant_id).count()}")

# ── 8. Invoices ─────────────────────────────────────────────────────────────
print("\n" + "="*70)
print("8. INVOICES (Double-Entry Journal Entries)")
print("="*70)

# Build invoice payloads
class InvoiceLinePayload:
    def __init__(self, product_id, description, quantity, unit_price, tax_rate):
        self.product_id = product_id
        self.description = description
        self.quantity = quantity
        self.unit_price = unit_price
        self.tax_rate = tax_rate

class InvoicePayload:
    def __init__(self, customer_name, customer_email, deal_id, due_date, currency, notes, lines):
        self.customer_name = customer_name
        self.customer_email = customer_email
        self.deal_id = deal_id
        self.due_date = due_date
        self.currency = currency
        self.notes = notes
        self.terms = "Net 30"
        self.lines = lines

invoices_to_create = [
    InvoicePayload(
        customer_name="JLM Brokerage Corp",
        customer_email="billing@jlm-brokerage.com",
        deal_id=None,
        due_date=date.today() + timedelta(days=30),
        currency="PHP",
        notes="Q4 International Freight Services",
        lines=[
            InvoiceLinePayload(products[0].id, "International Freight Service - Manila Hub", Decimal("2.00"), Decimal("1500.00"), Decimal("12.00")),
            InvoiceLinePayload(products[1].id, "Customs Brokerage Service", Decimal("1.00"), Decimal("800.00"), Decimal("12.00")),
        ]
    ),
    InvoicePayload(
        customer_name="Medina Pharma Inc",
        customer_email="accounts@medina-pharma.com",
        deal_id=None,
        due_date=date.today() + timedelta(days=30),
        currency="PHP",
        notes="Cold Chain Logistics - October 2024",
        lines=[
            InvoiceLinePayload(products[7].id, "Cold Chain Logistics Service", Decimal("5.00"), Decimal("1200.00"), Decimal("0.00")),
            InvoiceLinePayload(products[4].id, "Cargo Insurance", Decimal("1.00"), Decimal("150.00"), Decimal("12.00")),
        ]
    ),
]
for inv_payload in invoices_to_create:
    inv, created = Invoice.objects.get_or_create(
        tenant_id=tenant_id,
        invoice_number=f"INV-SIM-{invoices_to_create.index(inv_payload)+1:03d}",
        defaults=dict(
            customer_name=inv_payload.customer_name,
            customer_email=inv_payload.customer_email,
            deal_id=inv_payload.deal_id,
            issue_date=date.today(),
            due_date=inv_payload.due_date,
            currency=inv_payload.currency,
            subtotal=Decimal("0.00"),  # computed in service
            tax_total=Decimal("0.00"),
            total_amount=Decimal("0.00"),
            notes=inv_payload.notes,
            terms=inv_payload.terms,
            status="SENT",
        )
    )
    if created:
        # Manually compute lines since we're using get_or_create
        for line in inv_payload.lines:
            InvoiceLine.objects.create(
                tenant_id=tenant_id,
                invoice=inv,
                product_id=line.product_id,
                description=line.description,
                quantity=line.quantity,
                unit_price=line.unit_price,
                tax_rate=line.tax_rate,
                subtotal=line.quantity * line.unit_price,
                tax_amount=(line.quantity * line.unit_price) * line.tax_rate / Decimal("100.00"),
                total=(line.quantity * line.unit_price) * (Decimal("1.00") + line.tax_rate / Decimal("100.00")),
            )
        # Recompute totals
        lines = InvoiceLine.objects.filter(invoice=inv)
        inv.subtotal = sum(l.subtotal for l in lines)
        inv.tax_total = sum(l.tax_amount for l in lines)
        inv.total_amount = inv.subtotal + inv.tax_total
        inv.save()
        # Post journal
        ERPService.post_invoice_journal(tenant_id, inv)
        print(f"  ✅ Created: INV-{inv.invoice_number} | {inv.customer_name} | ₱{inv.total_amount} | Status: {inv.status}")
    else:
        print(f"  🔄 Exists: INV-{inv.invoice_number} | {inv.customer_name} | ₱{inv.total_amount}")

print(f"  Total invoices: {Invoice.objects.filter(tenant_id=tenant_id).count()}")
je_count = JournalEntry.objects.filter(tenant_id=tenant_id, reference_type='INVOICE').count()
print(f"  Total invoice journal entries: {je_count}")

# ── 9. Record Payments ───────────────────────────────────────────────────────
print("\n" + "="*70)
print("9. PAYMENTS (Double-Entry Journal Entries)")
print("="*70)
invoices = Invoice.objects.filter(tenant_id=tenant_id, status__in=['SENT', 'PARTIALLY_PAID'])
for inv in invoices:
    # Record partial payment (50%)
    payment_amount = inv.total_amount * Decimal("0.50")
    try:
        paid_inv = ERPService.record_payment(tenant_id, inv.id, payment_amount)
        print(f"  ✅ Payment recorded: INV-{inv.invoice_number} | ₱{payment_amount} paid | Status: {paid_inv.status}")
    except Exception as e:
        print(f"  ⚠️  Payment failed: INV-{inv.invoice_number} | {e}")

pay_je_count = JournalEntry.objects.filter(tenant_id=tenant_id, reference_type='PAYMENT').count()
print(f"  Total payment journal entries: {pay_je_count}")

# ── 10. HR - Employees & Payroll ─────────────────────────────────────────────
print("\n" + "="*70)
print("10. HR - EMPLOYEES & PAYROLL")
print("="*70)
employees_data = [
    ("Juan", "Dela Cruz", "juan.delacrux@fudo.local", "Logistics Manager", Decimal("75000.00"), "MONTHLY"),
    ("Maria", "Santos", "maria.santos@fudo.local", "Operations Supervisor", Decimal("55000.00"), "MONTHLY"),
    ("Carlos", "Mendoza", "carlos.mendoza@fudo.local", "Warehouse Lead", Decimal("40000.00"), "MONTHLY"),
    ("Ana", "Reyes", "ana.reyes@fudo.local", "HR Coordinator", Decimal("45000.00"), "MONTHLY"),
    ("Pedro", "Garcia", "pedro.garcia@fudo.local", "Truck Driver", Decimal("35000.00"), "MONTHLY"),
]
for first, last, email, title, salary, pay_type in employees_data:
    emp, created = Employee.objects.get_or_create(
        tenant_id=tenant_id, email=email,
        defaults=dict(
            first_name=first, last_name=last, job_title=title,
            salary=salary, pay_type=pay_type, hire_date=date.today() - timedelta(days=180),
            is_active=True
        )
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {emp.first_name} {emp.last_name} | {emp.job_title} | ₱{emp.salary}/{emp.pay_type}")

print(f"  Total employees: {Employee.objects.filter(tenant_id=tenant_id).count()}")

# Create a payroll run
pr, created = PayrollRun.objects.get_or_create(
    tenant_id=tenant_id,
    run_date=date.today(),
    period_start=date.today() - timedelta(days=30),
    period_end=date.today(),
    defaults=dict(status="DRAFT", total_amount=Decimal("0.00"))
)
if created:
    employees = Employee.objects.filter(tenant_id=tenant_id, is_active=True)
    total = Decimal("0.00")
    for emp in employees:
        Payslip.objects.create(
            tenant_id=tenant_id,
            employee=emp,
            payroll_run=pr,
            basic_salary=emp.salary,
            pay_from=pr.period_start,
            pay_to=pr.period_end,
            net_pay=emp.salary,  # simplified
        )
        total += emp.salary
    pr.total_amount = total
    pr.save()
print(f"  ✅ Payroll Run: PR-{pr.run_date.strftime('%Y%m%d')} | ₱{pr.total_amount} | Status: {pr.status}")
print(f"  Total payroll runs: {PayrollRun.objects.filter(tenant_id=tenant_id).count()}")

# ── 11. Trucking - Vehicles, Drivers, Fuel ────────────────────────────────────
print("\n" + "="*70)
print("11. TRUCKING - VEHICLES, DRIVERS & FUEL LOGS")
print("="*70)
vehicles_data = [
    ("TRK-001", "Mitsubishi Fuso", "ABC-1234", Decimal("10.00"), "ACTIVE"),
    ("TRK-002", "Isuzu Elf", "XYZ-5678", Decimal("8.50"), "ACTIVE"),
    ("TRK-003", "Hyundai H-100", "DEF-9012", Decimal("6.00"), "MAINTENANCE"),
]
for code, model, plate, fuel_cap, status_v in vehicles_data:
    v, created = Vehicle.objects.get_or_create(
        tenant_id=tenant_id, vehicle_number=code,
        defaults=dict(model=model, plate_number=plate, fuel_capacity=fuel_cap, status=status_v)
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {v.vehicle_number} | {v.model} | {v.plate_number} | {v.status}")

drivers_data = [
    ("Roberto", "Aquino", "roberto.aquino@fudo.local", "TRK-001", "VALID"),
    ("Luis", "Cruz", "luis.cruz@fudo.local", "TRK-002", "VALID"),
]
for first, last, email, truck_code, lic_status in drivers_data:
    truck = Vehicle.objects.filter(tenant_id=tenant_id, vehicle_number=truck_code).first()
    d, created = Driver.objects.get_or_create(
        tenant_id=tenant_id, email=email,
        defaults=dict(
            first_name=first, last_name=last,
            license_number=f"DL-{email[-8:-5].upper()}-2024",
            license_expiry=date.today() + timedelta(days=365),
            license_status=lic_status, status="ACTIVE", assigned_vehicle=truck
        )
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {d.first_name} {d.last_name} | {d.license_number} | Truck: {truck_code}")

# Fuel logs
vehicles = list(Vehicle.objects.filter(tenant_id=tenant_id)[:2])
for v in vehicles:
    fl, created = FuelLog.objects.get_or_create(
        tenant_id=tenant_id, vehicle=v, log_date=date.today(),
        defaults=dict(
            odometer_reading=Decimal("50000.00"),
            liters_filled=Decimal("50.00"),
            price_per_liter=Decimal("65.00"),
            total_cost=Decimal("3250.00"),
            fuel_type="Diesel", location="Manila Petron Station"
        )
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: Fuel Log | {v.vehicle_number} | {fl.liters_filled}L @ ₱{fl.price_per_liter}/L")

# ── 12. Customs - Entries & Duty Rates ────────────────────────────────────────
print("\n" + "="*70)
print("12. CUSTOMS - ENTRIES & DUTY RATES")
print("="*70)
duty_rates_data = [
    ("8401.40.00", "Fish Meal", Decimal("5.00"), "kg"),
    ("9503.00.00", "Toys and Models", Decimal("20.00"), "pc"),
    ("3004.90.90", "Pharmaceutical Products", Decimal("1.00"), "kg"),
    ("8701.20.00", "Trucks (Commercial)", Decimal("3.00"), "pc"),
]
for hs, desc, rate, uom in duty_rates_data:
    dr, created = DutyRate.objects.get_or_create(
        tenant_id=tenant_id, hs_code=hs,
        defaults=dict(description=desc, duty_rate=rate, unit_of_measure=uom, is_active=True)
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: HS {dr.hs_code} | {dr.description} | {dr.duty_rate}% {dr.unit_of_measure}")

shipments_for_customs = Shipment.objects.filter(tenant_id=tenant_id, status='IN_TRANSIT')[:1]
for sh in shipments_for_customs:
    ce, created = CustomsEntry.objects.get_or_create(
        tenant_id=tenant_id, shipment=sh,
        defaults=dict(
            entry_number=f"CE-{sh.reference_number}",
            entry_type="IMPORT",
            entry_date=date.today(),
            customs_value=sh.declared_value,
            duty_amount=sh.duty_amount,
            vat_amount=(sh.declared_value + sh.duty_amount) * Decimal("0.12"),
            status="PENDING",
        )
    )
    status = "✅ Created" if created else "🔄 Exists"
    print(f"  {status}: {ce.entry_number} | Shipment: {sh.reference_number} | ₱{ce.duty_amount} duty")

# ── Final Summary ─────────────────────────────────────────────────────────────
print("\n" + "="*70)
print("📊 FINAL SUMMARY")
print("="*70)
print(f"  Accounts:        {Account.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Products:        {Product.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Warehouses:      {Warehouse.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Stock Moves:     {StockMove.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Invoices:        {Invoice.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Shipments:       {Shipment.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Shipping Quotes: {ShippingQuote.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Freight Quotes:  {FreightQuote.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Journal Entries:  {JournalEntry.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Journal Items:    {JournalItem.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Companies:       {Company.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Deals:            {Deal.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Employees:        {Employee.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Payroll Runs:     {PayrollRun.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Vehicles:         {Vehicle.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Drivers:          {Driver.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Fuel Logs:        {FuelLog.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Customs Entries:  {CustomsEntry.objects.filter(tenant_id=tenant_id).count():>6}")
print(f"  Duty Rates:       {DutyRate.objects.filter(tenant_id=tenant_id).count():>6}")
print("="*70)
print("✅ Transaction simulation complete!")
