from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.core.validators import MinValueValidator
from django.utils import timezone
import os

# ==================== CUSTOM USER MANAGER ====================

class LeaderManager(BaseUserManager):
    """Manager kwa ajili ya viongozi wanaoingia kwa namba ya simu"""
    
    def create_user(self, phone_number, password=None, **extra_fields):
        if not phone_number:
            raise ValueError('Namba ya simu inahitajika')
        
        user = self.model(phone_number=phone_number, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user
    
    def create_superuser(self, phone_number, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)
        
        return self.create_user(phone_number, password, **extra_fields)


# ==================== USER MODEL (VIONGOZI) ====================

class Leader(AbstractBaseUser, PermissionsMixin):
    """
    Jedwali la viongozi wote wanaoingia kwenye mfumo
    Wanaingia kwa namba ya simu na password
    """
    phone_number = models.CharField(
        max_length=13, 
        unique=True, 
        verbose_name="Namba ya simu"
    )
    
    full_name = models.CharField(max_length=200, blank=True, null=True, verbose_name="Jina kamili")
    
    # Kwa ajili ya kujua ni kiongozi wa nani? (Mwenyekiti, Muhasibu, Katibu, nk)
    # Hii itaunganishwa na GroupLeader baadaye
    
    is_active = models.BooleanField(default=True, verbose_name="Akaunti imewashwa?")
    is_staff = models.BooleanField(default=False, verbose_name="Anaweza kuingia admin?")
    
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="Tarehe ya kujiunga")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="Tarehe ya mabadiliko")
    
    # Kumbukumbu ya ni nani aliyemwongeza (kwa wale viongozi walioongezwa na mwenyekiti)
    added_by = models.ForeignKey(
        'self', 
        on_delete=models.SET_NULL, 
        null=True, 
        blank=True, 
        verbose_name="Aliyemwongeza"
    )
    
    USERNAME_FIELD = 'phone_number'
    REQUIRED_FIELDS = []  # Hakuna required fields za ziada
    
    objects = LeaderManager()
    
    class Meta:
        verbose_name = "Kiongozi"
        verbose_name_plural = "Viongozi"
        ordering = ['-created_at']
        indexes = [
            models.Index(fields=['phone_number'], name='leader_phone_idx'),
            models.Index(fields=['-created_at'], name='leader_created_at_idx'),
            models.Index(fields=['full_name'], name='leader_name_idx'),
            models.Index(fields=['is_active'], name='leader_active_idx'),
        ]
    
    # class Meta:
    #     verbose_name = "Kiongozi"
    #     verbose_name_plural = "Viongozi"
    #     ordering = ['-created_at']
    
    def __str__(self):
        return f"{self.full_name or self.phone_number}"
    
    def get_full_name(self):
        return self.full_name or self.phone_number
    
    def get_short_name(self):
        return self.full_name or self.phone_number


# ==================== CHEO (POSITION) ====================

class Position(models.Model):
    """Vyeo: Mwenyekiti, Muhasibu, Katibu, nk"""
    name = models.CharField(max_length=100, verbose_name="Jina la cheo")
    description = models.TextField(blank=True, null=True, verbose_name="Maelezo")
    level = models.IntegerField(default=2, verbose_name="Kiwango (1=mwenyekiti, 2=wengine)")
    can_add_leaders = models.BooleanField(default=False, verbose_name="Anaweza kuongeza viongozi?")
    can_reset_passwords = models.BooleanField(default=False, verbose_name="Anaweza kubadilisha passwords?")
    can_delete_members = models.BooleanField(default=False, verbose_name="Anaweza kufuta wanachama?")  # Ongeza hii
    is_default = models.BooleanField(default=False, verbose_name="Cheo cha kawaida?")
    is_active = models.BooleanField(default=True, verbose_name="Cheo kinafanya kazi?")  # ONGEZA LINE HII
    
    class Meta:
        verbose_name = "Cheo"
        verbose_name_plural = "Vyeo"
    
    def __str__(self):
        return self.name

# ==================== KIKUNDI (GROUP) ====================

class Group(models.Model):
    """
    Jedwali la kikundi kimoja
    """
    name = models.CharField(max_length=200, verbose_name="Jina la kikundi")
    m_koba_number = models.CharField(max_length=15, blank=True, null=True, verbose_name="Namba ya M-Koba ya kikundi")
    description = models.TextField(blank=True, null=True, verbose_name="Maelezo ya kikundi")
    
    # Mwenyekiti wa kikundi (ndiye aliyeanzisha)
    chairperson = models.ForeignKey(
         Leader, 
        on_delete=models.PROTECT, 
        related_name='groups_founded',
        verbose_name="Mwenyekiti"
    )
    
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="Tarehe ya kuanzishwa")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="Tarehe ya mabadiliko")
    
    is_active = models.BooleanField(default=True, verbose_name="Kikundi kinafanya kazi?")
    
    class Meta:
        verbose_name = "Kikundi"
        verbose_name_plural = "Vikundi"
        ordering = ['-created_at']
        indexes = [
            models.Index(fields=['name'], name='group_name_idx'),
            models.Index(fields=['chairperson'], name='group_chairperson_idx'),
            models.Index(fields=['-created_at'], name='group_created_at_idx'),
            models.Index(fields=['m_koba_number'], name='group_mkoba_idx'),
            models.Index(fields=['is_active'], name='group_active_idx'),
        ]
    
    # class Meta:
    #     verbose_name = "Kikundi"
    #     verbose_name_plural = "Vikundi"
    #     ordering = ['-created_at']
    
    def __str__(self):
        return self.name


# ==================== UHUSIANO WA KIONGOZI NA KIKUNDI ====================

class GroupLeader(models.Model):
    """
    Jedwali la kuunganisha viongozi na vikundi vyao
    Kiongozi mmoja anaweza kuwa kwenye vikundi vingi?
    Kikundi kimoja kinaweza kuwa na viongozi wengi (vyeo tofauti)
    """
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='group_leaders', verbose_name="Kikundi")
    leader = models.ForeignKey( Leader, on_delete=models.CASCADE, related_name='group_roles', verbose_name="Kiongozi")
    position = models.ForeignKey(Position, on_delete=models.PROTECT, verbose_name="Cheo")
    
    # Kumbukumbu ya nani aliyemteua kiongozi huyu
    appointed_by = models.ForeignKey(
         Leader, 
        on_delete=models.SET_NULL, 
        null=True, 
        related_name='appointed_leaders',
        verbose_name="Aliyemteua"
    )
    
    appointed_at = models.DateTimeField(auto_now_add=True, verbose_name="Tarehe ya kuteuliwa")
    is_active = models.BooleanField(default=True, verbose_name="Bado ni kiongozi?")
    
    class Meta:
        verbose_name = "Kiongozi wa kikundi"
        verbose_name_plural = "Viongozi wa vikundi"
        unique_together = ['group', 'leader']
        ordering = ['group', 'position__level']
        indexes = [
            models.Index(fields=['group', 'is_active'], name='groupleader_group_active_idx'),
            models.Index(fields=['leader', 'is_active'], name='groupleader_leader_active_idx'),
            models.Index(fields=['position'], name='groupleader_position_idx'),
            models.Index(fields=['appointed_at'], name='groupleader_appointed_idx'),
        ]
    
    # class Meta:
    #     verbose_name = "Kiongozi wa kikundi"
    #     verbose_name_plural = "Viongozi wa vikundi"
    #     unique_together = ['group', 'leader']  # Kiongozi mmoja mara moja kwenye kikundi kimoja
    #     ordering = ['group', 'position__level']
    
    def __str__(self):
        return f"{self.leader.get_full_name()} - {self.position.name} wa {self.group.name}"


# ==================== MWANACHAMA (MEMBER) ====================

class Member(models.Model):
    """
    Jedwali la kila mwanachama wa kikundi
    Hawa hawana login, wanatazama taarifa zao kwa namba ya simu + PIN
    """
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='members', verbose_name="Kikundi")
    
    full_name = models.CharField(max_length=200, verbose_name="Jina kamili la mwanachama")
    phone_number = models.CharField(max_length=13, verbose_name="Namba ya simu")
    
    # PIN ya siri (01, 02, 12, 45, nk) - anapewa na kiongozi
    secret_pin = models.CharField(max_length=10, verbose_name="PIN ya siri")
    
    # Taarifa za ziada (hiari)
    date_of_birth = models.DateField(null=True, blank=True, verbose_name="Tarehe ya kuzaliwa")
    national_id = models.CharField(max_length=20, blank=True, null=True, verbose_name="Namba ya kitambulisho")
    
    joined_at = models.DateTimeField(auto_now_add=True, verbose_name="Tarehe ya kujiunga")
    is_active = models.BooleanField(default=True, verbose_name="Bado ni mwanachama?")
    
    # Ni kiongozi gani aliyemuingiza?
    added_by = models.ForeignKey(
         Leader, 
        on_delete=models.SET_NULL, 
        null=True, 
        related_name='added_members',
        verbose_name="Aliyemuingiza"
    )
    
    class Meta:
        verbose_name = "Mwanachama"
        verbose_name_plural = "Wanachama"
        ordering = ['group', 'full_name']
        unique_together = ['group', 'phone_number']
        indexes = [
            models.Index(fields=['group', 'is_active'], name='member_group_active_idx'),
            models.Index(fields=['phone_number'], name='member_phone_idx'),
            models.Index(fields=['full_name'], name='member_name_idx'),
            models.Index(fields=['group', 'full_name'], name='member_group_name_idx'),
            models.Index(fields=['secret_pin'], name='member_pin_idx'),
            models.Index(fields=['joined_at'], name='member_joined_at_idx'),
        ]
    
    # class Meta:
    #     verbose_name = "Mwanachama"
    #     verbose_name_plural = "Wanachama"
    #     ordering = ['group', 'full_name']
    #     unique_together = ['group', 'phone_number'] 
    
    def __str__(self):
        return f"{self.full_name} - {self.group.name}"


# ==================== MCHANGO (CONTRIBUTION) ====================

class Contribution(models.Model):
    """
    Jedwali la kila mchango (malipo) wa mwanachama
    """
    member = models.ForeignKey(Member, on_delete=models.CASCADE, related_name='contributions', verbose_name="Mwanachama")
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='contributions', verbose_name="Kikundi")
    
    amount = models.DecimalField(
        max_digits=12, 
        decimal_places=0, 
        validators=[MinValueValidator(1)], 
        verbose_name="Kiasi (Tsh)"
    )
    
    reference_number = models.CharField(max_length=100, verbose_name="Reference number ya malipo")
    
    payment_date = models.DateField(default=timezone.now, verbose_name="Tarehe ya malipo")
    recorded_at = models.DateTimeField(auto_now_add=True, verbose_name="Tarehe ya kurekodi")
    
    # ============ FIELDS MPYA ============
    payment_month = models.PositiveSmallIntegerField(
        null=True, 
        blank=True,
        choices=[(i, i) for i in range(1, 13)],
        verbose_name="Mwezi wa malipo (1-12)"
    )
    payment_year = models.PositiveSmallIntegerField(
        null=True, 
        blank=True,
        default=timezone.now().year,  # HII
        verbose_name="Mwaka wa malipo"
    )
    # =====================================
    
    recorded_by = models.ForeignKey(
        Leader, 
        on_delete=models.SET_NULL, 
        null=True, 
        related_name='recorded_contributions',
        verbose_name="Aliyerekodi"
    )
    
    notes = models.TextField(blank=True, null=True, verbose_name="Maelezo")
    
    class Meta:
        verbose_name = "Mchango"
        verbose_name_plural = "Michango"
        ordering = ['-payment_date', '-recorded_at']
        indexes = [
            models.Index(fields=['group', '-payment_date'], name='contrib_group_date_idx'),
            models.Index(fields=['member', '-payment_date'], name='contrib_member_date_idx'),
            models.Index(fields=['reference_number'], name='contrib_ref_idx'),
            models.Index(fields=['payment_date'], name='contrib_payment_date_idx'),
            models.Index(fields=['group', 'member'], name='contrib_group_member_idx'),
            models.Index(fields=['recorded_by'], name='contrib_recorded_by_idx'),
            # INDEX MPYA
            models.Index(fields=['payment_year', 'payment_month'], name='contrib_period_idx'),
            models.Index(fields=['member', 'payment_year', 'payment_month'], name='contrib_member_period_idx'),
        ]
    
    def __str__(self):
        period = f"({self.payment_month}/{self.payment_year})" if self.payment_month and self.payment_year else ""
        return f"{self.member.full_name}: Tsh {self.amount} - {self.payment_date} {period}"
    
    def save(self, *args, **kwargs):
        # Automatically set payment_month and payment_year from payment_date if not provided
        if self.payment_month is None and self.payment_date:
            self.payment_month = self.payment_date.month
        if self.payment_year is None and self.payment_date:
            self.payment_year = self.payment_date.year
        super().save(*args, **kwargs)

class ContributionAllocation(models.Model):
    """
    Mgawanyo wa mchango mmoja kwa miezi tofauti
    Mchango mmoja (Tsh 60,000) unaweza kugawiwa kwa miezi 6
    """
    contribution = models.ForeignKey(
        Contribution, 
        on_delete=models.CASCADE, 
        related_name='allocations'
    )
    member = models.ForeignKey(
        Member, 
        on_delete=models.CASCADE, 
        related_name='contribution_allocations'
    )
    group = models.ForeignKey(
        Group, 
        on_delete=models.CASCADE, 
        related_name='contribution_allocations'
    )
    
    month = models.PositiveSmallIntegerField(verbose_name="Mwezi (1-12)")
    year = models.PositiveSmallIntegerField(verbose_name="Mwaka")
    amount = models.DecimalField(
        max_digits=12, 
        decimal_places=0, 
        verbose_name="Kiasi kilichotengwa kwa mwezi huu"
    )
    
    STATUS_CHOICES = [
        ('active', 'Inatumika'),
        ('adjusted', 'Imerekebishwa'),
        ('cancelled', 'Imefutwa'),
    ]
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='active')
    
    allocated_by = models.ForeignKey(
        Leader, 
        on_delete=models.SET_NULL, 
        null=True, 
        related_name='allocations_made'
    )
    allocated_at = models.DateTimeField(auto_now_add=True)
    notes = models.TextField(blank=True, null=True)
    
    class Meta:
        verbose_name = "Mgawanyo wa Mchango"
        verbose_name_plural = "Migawanyo ya Michango"
        unique_together = ['contribution', 'member', 'group', 'year', 'month']
        ordering = ['-year', '-month']
        indexes = [
            models.Index(fields=['member', 'group', 'year', 'month']),
            models.Index(fields=['contribution']),
            models.Index(fields=['status']),
        ]
    
    def __str__(self):
        return f"{self.member.full_name}: {self.month}/{self.year} - Tsh {self.amount}"

# ==================== MSAADA (DISBURSEMENT) ====================

class Disbursement(models.Model):
    """
    Jedwali la kutoa pesa kwa mwanachama mwenye shida
    """
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='disbursements', verbose_name="Kikundi")
    
    # Anayepokea msaada
    recipient_name = models.CharField(max_length=200, verbose_name="Jina la mpokeaji")
    recipient_phone = models.CharField(max_length=13, blank=True, null=True, verbose_name="Namba ya mpokeaji")
    
    amount = models.DecimalField(
        max_digits=12, 
        decimal_places=0, 
        validators=[MinValueValidator(1)], 
        verbose_name="Kiasi (Tsh)"
    )
    
    REASON_CHOICES = [
        ('death', 'Msiba (kifo)'),
        ('sickness', 'Ugonjwa'),
        ('disaster', 'Majanga'),
        ('other', 'Nyingine'),
    ]
    reason = models.CharField(max_length=20, choices=REASON_CHOICES, verbose_name="Sababu")
    reason_description = models.TextField(verbose_name="Maelezo ya sababu")
    
    # Kiambatisho (hati, barua ya hospitali, nk) - hiari
    attachment = models.FileField(
        upload_to='disbursements/%Y/%m/%d/', 
        blank=True, 
        null=True, 
        verbose_name="Kiambatisho"
    )
    
    disbursement_date = models.DateField(default=timezone.now, verbose_name="Tarehe ya kutoa")
    recorded_at = models.DateTimeField(auto_now_add=True, verbose_name="Tarehe ya kurekodi")
    
    # Ni kiongozi gani aliyeanzisha?
    initiated_by = models.ForeignKey(
         Leader, 
        on_delete=models.SET_NULL, 
        null=True, 
        related_name='initiated_disbursements',
        verbose_name="Aliyeanzisha"
    )
    
    notes = models.TextField(blank=True, null=True, verbose_name="Maelezo ya ziada")
    
    class Meta:
        verbose_name = "Msaada"
        verbose_name_plural = "Misada"
        ordering = ['-disbursement_date', '-recorded_at']
        indexes = [
            models.Index(fields=['group', '-disbursement_date'], name='disburse_group_date_idx'),
            models.Index(fields=['recipient_phone'], name='disburse_recipient_phone_idx'),
            models.Index(fields=['disbursement_date'], name='disburse_date_idx'),
            models.Index(fields=['reason'], name='disburse_reason_idx'),
            models.Index(fields=['group', 'recipient_phone'], name='disburse_group_recipient_idx'),
            models.Index(fields=['initiated_by'], name='disburse_initiated_by_idx'),
        ]
    
    # class Meta:
    #     verbose_name = "Msaada"
    #     verbose_name_plural = "Misada"
    #     ordering = ['-disbursement_date', '-recorded_at']
    
    def __str__(self):
        return f"{self.group.name}: Tsh {self.amount} kwa {self.recipient_name}"


# ==================== MUHTASARI WA MWANACHAMA ====================

class MemberSummary(models.Model):
    """
    Jedwali la muhtasari wa mwanachama (kwa speed)
    Linaweza kujazwa kwa signal au scheduled task
    """
    member = models.OneToOneField(Member, on_delete=models.CASCADE, related_name='summary', verbose_name="Mwanachama")
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='member_summaries', verbose_name="Kikundi")
    
    total_contributed = models.DecimalField(max_digits=12, decimal_places=0, default=0, verbose_name="Jumla ya michango")
    total_received = models.DecimalField(max_digits=12, decimal_places=0, default=0, verbose_name="Jumla ya misaada aliyopokea")
    last_contribution_date = models.DateField(null=True, blank=True, verbose_name="Mchango wa mwisho")
    last_contribution_amount = models.DecimalField(max_digits=12, decimal_places=0, default=0, verbose_name="Kiasi cha mwisho")
    
    updated_at = models.DateTimeField(auto_now=True, verbose_name="Ilibadilishwa mwisho")
    
    class Meta:
        verbose_name = "Muhtasari wa mwanachama"
        verbose_name_plural = "Muhtasari wa wanachama"
        indexes = [
            models.Index(fields=['group', '-total_contributed'], name='summary_group_contributed_idx'),
            models.Index(fields=['member'], name='summary_member_idx'),
            models.Index(fields=['group', 'member'], name='summary_group_member_idx'),
            models.Index(fields=['last_contribution_date'], name='summary_last_contrib_date_idx'),
        ]
    
    # class Meta:
    #     verbose_name = "Muhtasari wa mwanachama"
    #     verbose_name_plural = "Muhtasari wa wanachama"
    
    def __str__(self):
        return f"{self.member.full_name}: Tsh {self.total_contributed}"


# ==================== KUMBUKUMBU YA SHUGHULI (AUDIT LOG) ====================

class ActivityLog(models.Model):
    """
    Jedwali la kumbukumbu za kila shughuli muhimu
    """
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='activity_logs', verbose_name="Kikundi")
    
    ACTION_CHOICES = [
        ('add_leader', 'Kuongeza kiongozi'),
        ('remove_leader', 'Kumwondoa kiongozi'),
        ('change_leader_password', 'Kubadilisha password ya kiongozi'),
        ('add_member', 'Kuongeza mwanachama'),
        ('edit_member', 'Kuhariri mwanachama'),
        ('delete_member', 'Kufuta mwanachama'),
        ('record_contribution', 'Kurekodi mchango'),
        ('edit_contribution', 'Kuhariri mchango'),
        ('delete_contribution', 'Kufuta mchango'),
        ('add_disbursement', 'Kutoa msaada'),
        ('edit_disbursement', 'Kuhariri msaada'),
        ('delete_disbursement', 'Kufuta msaada'),
        ('view_report', 'Kutazama ripoti'),
        ('other', 'Nyingine'),
    ]
    
    action = models.CharField(max_length=30, choices=ACTION_CHOICES, verbose_name="Shughuli")
    description = models.TextField(verbose_name="Maelezo")
    
    performed_by = models.ForeignKey(
         Leader, 
        on_delete=models.SET_NULL, 
        null=True, 
        related_name='activity_logs',
        verbose_name="Aliyefanya"
    )
    
    performed_at = models.DateTimeField(auto_now_add=True, verbose_name="Tarehe na saa")
    
    # Kwa ufuatiliaji wa kitu kilichoathirika
    affected_object_type = models.CharField(max_length=50, null=True, blank=True, verbose_name="Aina ya kitu")
    affected_object_id = models.IntegerField(null=True, blank=True, verbose_name="ID ya kitu")
    
    class Meta:
        verbose_name = "Kumbukumbu ya shughuli"
        verbose_name_plural = "Kumbukumbu za shughuli"
        ordering = ['-performed_at']
        indexes = [
            models.Index(fields=['group', '-performed_at'], name='activity_group_date_idx'),
            models.Index(fields=['action'], name='activity_action_idx'),
            models.Index(fields=['performed_by'], name='activity_performed_by_idx'),
            models.Index(fields=['performed_at'], name='activity_performed_at_idx'),
            models.Index(fields=['group', 'action'], name='activity_group_action_idx'),
            models.Index(fields=['affected_object_type', 'affected_object_id'], name='activity_object_idx'),
        ]
    
    # class Meta:
    #     verbose_name = "Kumbukumbu ya shughuli"
    #     verbose_name_plural = "Kumbukumbu za shughuli"
    #     ordering = ['-performed_at']
    
    def __str__(self):
        return f"{self.performed_by}: {self.get_action_display()} - {self.performed_at}"


# ==================== MAOMBI YA KUBADILISHA PASSWORD (KWA WANACHAMA) ====================
# Optional: Kwa sasa si lazima, lakini kwa baadaye

class PasswordResetRequest(models.Model):
    """
    Kwa wakati ujao: wanachama wakisahau PIN yao
    """
    member = models.ForeignKey(Member, on_delete=models.CASCADE, related_name='reset_requests', verbose_name="Mwanachama")
    group = models.ForeignKey(Group, on_delete=models.CASCADE, verbose_name="Kikundi")
    
    request_token = models.CharField(max_length=100, unique=True, verbose_name="Tokeni")
    is_used = models.BooleanField(default=False, verbose_name="Imetumika?")
    
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="Tarehe ya ombi")
    expires_at = models.DateTimeField(verbose_name="Inaisha lini")
    
    class Meta:
        verbose_name = "Ombi la kubadilisha PIN"
        verbose_name_plural = "Maombi ya kubadilisha PIN"
    
    def __str__(self):
        return f"Ombi la {self.member.full_name} - {self.created_at}"
        
class MemberProfile(models.Model):
    """Taarifa za kina za mwanachama - zinajazwa na mwanachama mwenyewe"""
    
    member = models.OneToOneField(Member, on_delete=models.CASCADE, related_name='profile')
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='member_profiles')
    
    # ============ TAARIFA ZA MSINGI ============
    GENDER_CHOICES = [
        ('M', 'Me (Mwanamume)'),
        ('F', 'Ke (Mwanamke)'),
        ('', 'Sijataja'),
    ]
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES, blank=True, null=True)
    date_of_birth = models.DateField(blank=True, null=True)
    
    MARITAL_STATUS = [
        ('married', 'Nimeoa/Nimeolewa'),
        ('single', 'Sijaoa/Sijaolewa'),
        ('divorced', 'Nimeachana/Talaka'),
        ('widowed', 'Mjane/Mfiwa'),
        ('', 'Sijataja'),
    ]
    marital_status = models.CharField(max_length=10, choices=MARITAL_STATUS, blank=True, null=True)
    number_of_children = models.PositiveSmallIntegerField(default=0, blank=True, null=True)
    
    # ============ TAARIFA ZA WASILIANA ============
    spouse_phone = models.CharField(max_length=13, blank=True, null=True, verbose_name="Namba ya mwenzi")
    emergency_phone = models.CharField(max_length=13, blank=True, null=True, verbose_name="Namba ya dharura")
    email = models.EmailField(blank=True, null=True)
    physical_address = models.TextField(blank=True, null=True)
    region = models.CharField(max_length=50, blank=True, null=True)
    district = models.CharField(max_length=50, blank=True, null=True)
    ward = models.CharField(max_length=50, blank=True, null=True)
    
    # ============ TAARIFA ZA ELIMU NA UJENI ============
    EDUCATION_LEVEL = [
        ('none', 'Hakusoma'),
        ('primary', 'Elimu ya Msingi'),
        ('secondary', 'Elimu ya Sekondari'),
        ('diploma', 'Diploma'),
        ('degree', 'Shahada ya Kwanza'),
        ('masters', 'Shahada ya Uzamili'),
        ('phd', 'PhD / Daktari'),
        ('professional', 'Professional Course'),
        ('', 'Sijataja'),
    ]
    education_level = models.CharField(max_length=20, choices=EDUCATION_LEVEL, blank=True, null=True)
    profession = models.CharField(max_length=100, blank=True, null=True, verbose_name="Taaluma/Kazi")
    place_of_work = models.CharField(max_length=200, blank=True, null=True, verbose_name="Mahali pa kazi")
    skills = models.TextField(blank=True, null=True, help_text="Ujuzi wako (tenganisha kwa comma)")
    can_help_with = models.TextField(blank=True, null=True, help_text="Unaweza kusaidia wanachama wenzako kwa namna gani?")
    
    # ============ TAARIFA ZA BIASHARA ============
    business_name = models.CharField(max_length=200, blank=True, null=True)
    business_type = models.CharField(max_length=100, blank=True, null=True)
    business_products = models.TextField(blank=True, null=True)
    business_location = models.CharField(max_length=200, blank=True, null=True)
    
    # ============ TAARIFA NYINGINE ============
    hobbies = models.TextField(blank=True, null=True)
    bio = models.TextField(blank=True, null=True, help_text="Maelezo mafupi kukuhusu")
    
    # ============ PRIVACY SETTINGS ============
    PRIVACY_CHOICES = [
        ('public', 'Wanachama wote'),
        ('leaders', 'Viongozi tu'),
    ]
    phone_privacy = models.CharField(max_length=10, choices=PRIVACY_CHOICES, default='public')
    address_privacy = models.CharField(max_length=10, choices=PRIVACY_CHOICES, default='leaders')
    business_privacy = models.CharField(max_length=10, choices=PRIVACY_CHOICES, default='public')
    
    # Nani aliingiza / kuhariri
    filled_by = models.ForeignKey('Leader', on_delete=models.SET_NULL, null=True, blank=True, related_name='filled_profiles')
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        verbose_name = "Profaili ya Mwanachama"
        verbose_name_plural = "Profaili za Wanachama"
        unique_together = ['member', 'group']
    
    def __str__(self):
        return f"Profaili ya {self.member.full_name}"
    
    @property
    def age(self):
        if self.date_of_birth:
            today = timezone.now().date()
            return today.year - self.date_of_birth.year - ((today.month, today.day) < (self.date_of_birth.month, self.date_of_birth.day))
        return None        
        