"""
Management command to populate default receipt configurations
"""
from django.core.management.base import BaseCommand
from vas.models import ReceiptConfig


class Command(BaseCommand):
    help = 'Populate default receipt configurations for all receipt types'

    def handle(self, *args, **options):
        """Create default receipt configurations"""

        default_configs = [
            {
                'receipt_type': 'DEPOSIT_RECEIPT',
                'prefix': 'DEP',
                'start_number': 1,
                'current_number': 1,
                'increment_by': 1,
                'format': '{prefix}-{number}',
                'include_date': False,
                'include_time': False,
                'include_branch_code': False,
                'include_org_code': False,
                'is_active': True,
            },
            {
                'receipt_type': 'WITHDRAWAL_RECEIPT',
                'prefix': 'WITH',
                'start_number': 1,
                'current_number': 1,
                'increment_by': 1,
                'format': '{prefix}-{number}',
                'include_date': False,
                'include_time': False,
                'include_branch_code': False,
                'include_org_code': False,
                'is_active': True,
            },
            {
                'receipt_type': 'LOAN_REPAYMENT_RECEIPT',
                'prefix': 'LOAN',
                'start_number': 1,
                'current_number': 1,
                'increment_by': 1,
                'format': '{prefix}-{number}',
                'include_date': False,
                'include_time': False,
                'include_branch_code': False,
                'include_org_code': False,
                'is_active': True,
            },
            {
                'receipt_type': 'SHARE_PURCHASE_RECEIPT',
                'prefix': 'SHR',
                'start_number': 1,
                'current_number': 1,
                'increment_by': 1,
                'format': '{prefix}-{number}',
                'include_date': False,
                'include_time': False,
                'include_branch_code': False,
                'include_org_code': False,
                'is_active': True,
            },
            {
                'receipt_type': 'SHARE_WITHDRAWAL_RECEIPT',
                'prefix': 'SHRW',
                'start_number': 1,
                'current_number': 1,
                'increment_by': 1,
                'format': '{prefix}-{number}',
                'include_date': False,
                'include_time': False,
                'include_branch_code': False,
                'include_org_code': False,
                'is_active': True,
            },
            {
                'receipt_type': 'TRANSFER_RECEIPT',
                'prefix': 'TRN',
                'start_number': 1,
                'current_number': 1,
                'increment_by': 1,
                'format': '{prefix}-{number}',
                'include_date': False,
                'include_time': False,
                'include_branch_code': False,
                'include_org_code': False,
                'is_active': True,
            },
        ]

        created_count = 0
        existing_count = 0

        for config_data in default_configs:
            obj, created = ReceiptConfig.objects.get_or_create(
                receipt_type=config_data['receipt_type'],
                defaults=config_data
            )

            if created:
                created_count += 1
                self.stdout.write(
                    self.style.SUCCESS(
                        f'✓ Created receipt config: {config_data["receipt_type"]} ({config_data["prefix"]})'
                    )
                )
            else:
                existing_count += 1
                self.stdout.write(
                    self.style.WARNING(
                        f'- Already exists: {config_data["receipt_type"]} ({obj.prefix})'
                    )
                )

        self.stdout.write('\n' + '='*60)
        self.stdout.write(
            self.style.SUCCESS(
                f'\nSummary: {created_count} created, {existing_count} already existed'
            )
        )
        self.stdout.write('='*60 + '\n')
