from django.core.management.base import BaseCommand

from shop_management.models.data.advance import Advance
from shop_management.models.data.customer_balance_payment import CustomerBalancePayment
from shop_management.models.data.customer_debtor import CustomerDebtor
from shop_management.models.data.account_transfer import AccountTransfer
from shop_management.models.data.expense import Expense
from shop_management.models.data.passive_income import PassiveIncome
from shop_management.models.data.payroll import Payroll
from shop_management.models.data.purchase import Purchase
from shop_management.models.data.purchase_payment import PurchasePayment
from shop_management.models.data.purchase_return import PurchaseReturn
from shop_management.models.data.quotation import Quotation
from shop_management.models.data.sale import Sale
from shop_management.models.data.sale_payment import SalePayment
from shop_management.models.data.sale_return import SaleReturn
from shop_management.models.data.stock_transfer import StockTransfer
from shop_management.models.data.supplier_balance_payment import SupplierBalancePayment
from shop_management.services import diary_logger


class Command(BaseCommand):
    help = "Backfill roznamcha (daily diary) logs from existing system records."

    def handle(self, *args, **options):
        handlers = [
            (Purchase.objects.filter(is_deleted=False), diary_logger.log_purchase),
            (Sale.objects.all(), diary_logger.log_sale),
            (Quotation.objects.filter(is_deleted=False), diary_logger.log_quotation),
            (SalePayment.objects.all(), diary_logger.log_sale_payment),
            (PurchasePayment.objects.all(), diary_logger.log_purchase_payment),
            (CustomerBalancePayment.objects.all(), diary_logger.log_customer_balance_payment),
            (SupplierBalancePayment.objects.all(), diary_logger.log_supplier_balance_payment),
            (StockTransfer.objects.all(), diary_logger.log_stock_transfer),
            (Expense.objects.all(), diary_logger.log_expense),
            (SaleReturn.objects.all(), diary_logger.log_sale_return),
            (PurchaseReturn.objects.all(), diary_logger.log_purchase_return),
            (Payroll.objects.all(), diary_logger.log_payroll),
            (Advance.objects.all(), diary_logger.log_advance),
            (PassiveIncome.objects.all(), diary_logger.log_passive_income),
            (CustomerDebtor.objects.all(), diary_logger.log_customer_debtor),
            (AccountTransfer.objects.all(), diary_logger.log_account_transfer),
        ]

        total = 0
        for queryset, log_fn in handlers:
            count = 0
            for obj in queryset.iterator():
                log_fn(obj)
                count += 1
            total += count
            self.stdout.write(f"{log_fn.__name__}: {count}")

        self.stdout.write(self.style.SUCCESS(f"Backfill complete — processed {total} records."))
