from django.core.management.base import BaseCommand
from apps.sales.models import Sale, CreditTransaction, Commission, SaleReturn
from apps.accounting.services import TransactionSyncService
import logging

logger = logging.getLogger(__name__)

class Command(BaseCommand):
    help = 'Sync existing transactions from sales module to accounting'

    def handle(self, *args, **options):
        # Sync Sales
        self.stdout.write('Syncing Sales...')
        for sale in Sale.objects.filter(status__in=['COMPLETED', 'PENDING']):
            try:
                TransactionSyncService.create_from_sale(sale)
            except Exception as e:
                logger.error(f"Failed to sync sale {sale.id}: {e}")
        
        # Sync Credit Transactions
        self.stdout.write('Syncing Credit Transactions...')
        for credit in CreditTransaction.objects.all():
            try:
                TransactionSyncService.create_from_credit_transaction(credit)
            except Exception as e:
                logger.error(f"Failed to sync credit {credit.id}: {e}")
        
        # Sync Commissions
        self.stdout.write('Syncing Commissions...')
        for commission in Commission.objects.filter(status='PAID'):
            try:
                TransactionSyncService.create_from_commission(commission)
            except Exception as e:
                logger.error(f"Failed to sync commission {commission.id}: {e}")
        
        # Sync Returns
        self.stdout.write('Syncing Returns...')
        for return_obj in SaleReturn.objects.all():
            try:
                TransactionSyncService.create_from_sale_return(return_obj)
            except Exception as e:
                logger.error(f"Failed to sync return {return_obj.id}: {e}")
        
        self.stdout.write(self.style.SUCCESS('Successfully synced all transactions'))