from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from account.models import Member
from django.db import DatabaseError
from faker import Faker
import random
from account.models import *

CustomUser = get_user_model()
fake = Faker("en_BD")   # Bangladesh locale
User = get_user_model()

def generate_bd_mobile():
    """Generate Bangladeshi mobile number like 017XXXXXXXX"""
    prefix = random.choice(["013", "014", "015", "016", "017", "018", "019"])
    return prefix + str(random.randint(10000000, 99999999))




class Command(BaseCommand):
    help = "Seed fake Members with Users"

    def handle(self, *args, **options):
        n = 500
        members = []
        
        for i in range(n):
            # Army number (BA-12345)
            army_no = f"BA-{fake.unique.random_int(10000, 99999)}"
            mobile_no = generate_bd_mobile()
            name = fake.name()
            rank = Rank.objects.order_by("?").first()
            apartment = Apartment.objects.order_by("?").first()


            # Create CustomUser (username = army_no, password = mobile_no)
            user = CustomUser.objects.create_user(
                email=army_no,
                password=mobile_no,
                rank=rank,
                apartment=apartment,
                mobile_no=mobile_no,
                role = Role.objects.filter(h_name="member").first()
            )

            # Create Member
            member = Member(
                user=user,
                company=Company.objects.order_by("?").first(),
                member_type=rank.memberType,
                rank=rank,
                apartment=apartment,
                army_no=army_no,
                mobile_no=mobile_no,
                name=name,
                short_name=name.split(" ")[0],
                active=True,
            )

            members.append(member)

        # Bulk insert Members (users already saved individually)
        Member.objects.bulk_create(members)

        self.stdout.write(self.style.SUCCESS(f"{n} User(s) created successfully!"))
        self.stdout.write(self.style.SUCCESS(f"{n} Member(s) created successfully!"))
