from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from django.db import transaction
from apps.customers.models import Customer
from apps.members.models import Member

class Command(BaseCommand):
    help = 'Initializes basic member data: promotes an existing customer to a member.'

    def handle(self, *args, **options):
        User = get_user_model()

        self.stdout.write(self.style.SUCCESS('--- Initializing Member Data ---'))

        try:
            # Get the regular user and their customer profile
            regular_user = User.objects.get(email='user@example.com')
            customer = regular_user.customer
        except User.DoesNotExist:
            self.stdout.write(self.style.ERROR('Regular user (user@example.com) not found. Please run init_auth_data first.'))
            return
        except Customer.DoesNotExist:
            self.stdout.write(self.style.ERROR('Customer for user@example.com not found. Please run init_customers_data first.'))
            return

        with transaction.atomic():
            if not customer.is_member:
                self.stdout.write(f'Promoting customer {customer.user.email} to member...')
                try:
                    customer.promote_to_member(by_user=regular_user) # Assuming the regular user promotes themselves
                    self.stdout.write(self.style.SUCCESS('Customer promoted to member successfully.'))
                except ValueError as e:
                    self.stdout.write(self.style.ERROR(f'Error promoting customer to member: {e}'))
            else:
                self.stdout.write(self.style.WARNING(f'Customer {customer.user.email} is already a member.'))

        self.stdout.write(self.style.SUCCESS('--- Member Data Initialization Complete ---'))
