from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth import login, authenticate, logout
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.db.models import Sum
from django.http import JsonResponse
from django.utils import timezone
from datetime import date
from .models import (
    Leader, Position, Group, GroupLeader, Member, ContributionAllocation,
    Contribution, Disbursement, MemberSummary, ActivityLog
)
from .forms import (
    LeaderRegistrationForm, LeaderLoginForm, GroupCreateForm,
    MemberForm, ContributionForm, DisbursementForm,
    AddLeaderForm, MemberQueryForm, EditContributionForm, 
    EditDisbursementForm 
)


# ==================== UKURASA WA MWANZO (HOMEPAGE) ====================

def home(request):
    """Ukurasa wa kwanza - wanachama wanaweza kuangalia taarifa zao"""
    query_form = MemberQueryForm()
    return render(request, 'home.html', {'query_form': query_form})

from django.db.models import Q

def member_lookup(request):
    """Mwanachama anaingiza namba na PIN kuona taarifa zake"""
    if request.method == 'POST':
        form = MemberQueryForm(request.POST)
        if form.is_valid():
            phone = form.cleaned_data['phone_number']
            pin = form.cleaned_data['secret_pin']
            
            try:
                member = Member.objects.get(phone_number=phone, secret_pin=pin, is_active=True)
                group = member.group
                
                profile, created = MemberProfile.objects.get_or_create(member=member, group=group)
                
                # Pata michango yake
                contributions = member.contributions.all().order_by('-payment_date')
                
                # Pata misaada aliyopokea (yeye mwenyewe)
                my_disbursements = Disbursement.objects.filter(
                    group=group, 
                    recipient_phone=phone
                ).order_by('-disbursement_date')
                
                # Pata misaada yote ya kikundi
                all_disbursements = Disbursement.objects.filter(
                    group=group
                ).order_by('-disbursement_date')[:20]
                
                # Muhtasari wa mwanachama binafsi
                summary, _ = MemberSummary.objects.get_or_create(member=member, group=group)
                
                # TAKWIMU ZA KIKUNDI KWA UJUMLA
                total_members = group.members.filter(is_active=True).count()
                total_contributions = Contribution.objects.filter(group=group).aggregate(Sum('amount'))['amount__sum'] or 0
                total_disbursements = Disbursement.objects.filter(group=group).aggregate(Sum('amount'))['amount__sum'] or 0
                current_balance = total_contributions - total_disbursements
                
                other_members_count = total_members - 1
                
                # ============ MPYA: WANACHAMA WENGINE NA SEARCH ============
                search_query = request.GET.get('q', '')
                other_members = group.members.filter(is_active=True).exclude(id=member.id).select_related('profile')
                
                
                
                if search_query:
                    other_members = other_members.filter(
                        Q(full_name__icontains=search_query) |
                        Q(profile__profession__icontains=search_query) |
                        Q(profile__skills__icontains=search_query) |
                        Q(profile__region__icontains=search_query) |
                        Q(profile__district__icontains=search_query) |
                        Q(profile__business_name__icontains=search_query) |
                        Q(profile__business_type__icontains=search_query) |
                        Q(profile__business_products__icontains=search_query)
                    )
                
                context = {
                    'member': member,
                    'group': group,
                    'profile': profile, 
                    'contributions': contributions,
                    'my_disbursements': my_disbursements,
                    'all_disbursements': all_disbursements,
                    'summary': summary,
                    'total_members': total_members,
                    'total_contributions': total_contributions,
                    'total_disbursements': total_disbursements,
                    'current_balance': current_balance,
                    'other_members_count': other_members_count,
                    'other_members': other_members,
                    'search_query': search_query,
                }
                return render(request, 'member_dashboard.html', context)
                
            except Member.DoesNotExist:
                messages.error(request, "Namba ya simu au PIN si sahihi. Tafadhali wasiliana na kiongozi wa kikundi chako.")
                return redirect('home')
    else:
        form = MemberQueryForm()
    
    # Ikiwa kuna search query kwenye GET (kwa form submission)
    return render(request, 'home.html', {'query_form': form})

# ==================== USAJILI NA KUINGIA KWA VIONGOZI ====================

def leader_register(request):
    """Mwenyekiti anajisajili mwenyewe"""
    if request.method == 'POST':
        form = LeaderRegistrationForm(request.POST)
        if form.is_valid():
            leader = form.save(commit=False)
            leader.set_password(form.cleaned_data['password'])
            leader.save()
            login(request, leader)
            messages.success(request, "Karibu! Sasa unaweza kuanzisha kikundi chako kipya.")
            return redirect('create_group')
    else:
        form = LeaderRegistrationForm()
    return render(request, 'register.html', {'form': form})


def leader_login(request):
    """Kiongozi anaingia kwenye mfumo"""
    if request.method == 'POST':
        form = LeaderLoginForm(request, data=request.POST)
        if form.is_valid():
            phone = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(request, username=phone, password=password)
            if user is not None:
                login(request, user)
                messages.success(request, f"Karibu tena, {user.get_full_name() or user.phone_number}!")
                return redirect('leader_dashboard')
        messages.error(request, "Namba ya simu au nenosiri si sahihi.")
    else:
        form = LeaderLoginForm()
    return render(request, 'login.html', {'form': form})


def leader_logout(request):
    """Kiongozi anatoka"""
    logout(request)
    messages.info(request, "Umetoka vizuri.")
    return redirect('home')


# ==================== DASHBOARD NA MANAGEMENT YA KIKUNDI ====================

@login_required
def leader_dashboard(request):
    """Dashboard kuu ya kiongozi - inaonyesha vikundi vyake vyote"""
    group_roles = request.user.group_roles.filter(is_active=True).select_related('group', 'position')
    
    # Kwa kila kikundi, pata takwimu za msingi
    groups_data = []
    for gr in group_roles:
        group = gr.group
        members_count = group.members.filter(is_active=True).count()
        total_contributions = Contribution.objects.filter(group=group).aggregate(Sum('amount'))['amount__sum'] or 0
        total_disbursements = Disbursement.objects.filter(group=group).aggregate(Sum('amount'))['amount__sum'] or 0
        current_balance = total_contributions - total_disbursements
        
        groups_data.append({
            'group': group,
            'position': gr.position,
            'members_count': members_count,
            'total_contributions': total_contributions,
            'total_disbursements': total_disbursements,
            'current_balance': current_balance,
        })
    
    return render(request, 'dashboard.html', {'groups_data': groups_data})


from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.conf import settings

@login_required
def create_group(request):
    """Mwenyekiti anaunda kikundi kipya"""
    if request.method == 'POST':
        form = GroupCreateForm(request.POST)
        if form.is_valid():
            group = form.save(commit=False)
            group.chairperson = request.user
            group.save()
            
            # automatically add current user as chairperson of this group
            chair_position = Position.objects.get_or_create(
                name="Mwenyekiti", 
                defaults={'level': 1, 'can_add_leaders': True, 'can_reset_passwords': True, 'can_delete_members': True}
            )[0]
            GroupLeader.objects.create(
                group=group, 
                leader=request.user, 
                position=chair_position,
                appointed_by=request.user
            )
            
            # Log activity
            ActivityLog.objects.create(
                group=group,
                action='add_leader',
                description=f"{request.user.get_full_name()} alianzisha kikundi {group.name}",
                performed_by=request.user
            )
            
            # ============ Tuma Email Notification ============
            try:
                # Prepare email subject
                subject = f"ðŸ”” Kikundi Kipya: {group.name} - Simamia"
                
                # Prepare context for email template
                context = {
                    'group': group,
                    'chairperson': request.user,
                    'site_url': settings.SITE_URL,
                }
                
                # Render HTML template
                html_message = render_to_string('emails/new_group_notification.html', context)
                plain_message = strip_tags(html_message)
                
                # Send email to admin
                send_mail(
                    subject=subject,
                    message=plain_message,
                    from_email=settings.DEFAULT_FROM_EMAIL,
                    recipient_list=[settings.ADMIN_EMAIL],
                    html_message=html_message,
                    fail_silently=False,  # Ikiwa email haitumi, itatupa error
                )
                
                # Optional: Send email to the chairperson as confirmation
                if request.user.email:
                    chairperson_subject = f"Karibu {group.name}! Kikundi chako kimeundwa"
                    chairperson_context = {
                        'group': group,
                        'chairperson': request.user,
                        'site_url': settings.SITE_URL,
                    }
                    chairperson_html = render_to_string('emails/group_created_confirmation.html', chairperson_context)
                    chairperson_plain = strip_tags(chairperson_html)
                    
                    send_mail(
                        subject=chairperson_subject,
                        message=chairperson_plain,
                        from_email=settings.DEFAULT_FROM_EMAIL,
                        recipient_list=[request.user.email],
                        html_message=chairperson_html,
                        fail_silently=True,  # Ikiwa email haipo, usionyeshe error
                    )
                
            except Exception as e:
                # Log error but don't break the flow
                print(f"Email sending failed: {e}")
                # Unaweza kuandika kwenye log file
                import logging
                logger = logging.getLogger(__name__)
                logger.error(f"Failed to send email for new group {group.id}: {e}")
            # ==================================================
            
            messages.success(request, f"Kikundi '{group.name}' kimeanzishwa kikamilifu!")
            return redirect('group_detail', group_id=group.id)
    else:
        form = GroupCreateForm()
    
    return render(request, 'create_group.html', {'form': form})

@login_required
def group_detail(request, group_id):
    """Ukurasa wa kikundi kimoja - onyesha wanachama, michango, nk"""
    from django.db.models import Count, Sum, Q
    from django.utils import timezone
    from datetime import timedelta
    from django.urls import reverse
    
    group = get_object_or_404(Group, id=group_id)
    
    # Hakikisha kiongozi huyu ana uhusiano na kikundi hiki
    group_leader = get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    # Takwimu za kikundi
    members = group.members.filter(is_active=True)
    total_members = members.count()
    total_contributions = Contribution.objects.filter(group=group).aggregate(Sum('amount'))['amount__sum'] or 0
    total_disbursements = Disbursement.objects.filter(group=group).aggregate(Sum('amount'))['amount__sum'] or 0
    current_balance = total_contributions - total_disbursements
    
    # ============ MPYA: Ongeza profile_link kwa kila mwanachama ============
    for member in members:
        member.profile_link = request.build_absolute_uri(
            reverse('edit_member_profile', args=[group.id, member.id])
        )
    # =======================================================================
    
    # Michango ya hivi karibuni
    recent_contributions = Contribution.objects.filter(group=group).order_by('-payment_date')[:10]
    
    # Viongozi wote wa kikundi hiki
    group_leaders = group.group_leaders.filter(is_active=True).select_related('leader', 'position')
    
    # ==================== CHAGUO A: SUMMARY YA KILA MWEZI ====================
    current_date = timezone.now().date()
    months_list = []
    
    for i in range(-6, 4):
        target_date = current_date + timedelta(days=30*i)
        target_year = target_date.year
        target_month = target_date.month
        target_month_name = target_date.strftime('%B')
        
        paid_contributions = Contribution.objects.filter(
            group=group,
            payment_year=target_year,
            payment_month=target_month
        )
        
        paid_members = paid_contributions.values('member').distinct().count()
        total_amount = paid_contributions.aggregate(Sum('amount'))['amount__sum'] or 0
        
        all_member_ids = set(members.values_list('id', flat=True))
        paid_member_ids = set(paid_contributions.values_list('member', flat=True).distinct())
        not_paid_count = len(all_member_ids - paid_member_ids)
        
        months_list.append({
            'year': target_year,
            'month': target_month,
            'month_name': target_month_name,
            'display_name': f"{target_month_name} {target_year}",
            'offset': i,
            'paid_count': paid_members,
            'not_paid_count': not_paid_count,
            'total_members': total_members,
            'total_amount': total_amount,
            'percentage': (paid_members / total_members * 100) if total_members > 0 else 0,
        })
    
    # ==================== CHAGUO C: DATA KWA KILA MWANACHAMA KWA MIEZI ====================
    member_months_data = []
    
    check_months = []
    for i in range(-3, 3):
        target_date = current_date + timedelta(days=30*i)
        check_months.append({
            'year': target_date.year,
            'month': target_date.month,
            'display': target_date.strftime('%b %y'),
            'offset': i,
        })
    
    for member in members:
        monthly_status = []
        
        for month_info in check_months:
            has_paid = Contribution.objects.filter(
                member=member,
                group=group,
                payment_year=month_info['year'],
                payment_month=month_info['month']
            ).exists()
            
            if has_paid:
                if month_info['offset'] > 0:
                    status = 'prepaid'
                else:
                    status = 'paid'
            else:
                if month_info['offset'] < 0:
                    status = 'missed'
                elif month_info['offset'] == 0:
                    status = 'pending'
                else:
                    status = 'upcoming'
    
            monthly_status.append({
                'year': month_info['year'],
                'month': month_info['month'],
                'display': month_info['display'],
                'status': status,
                'offset': month_info['offset'],
            })
        
        summary = MemberSummary.objects.filter(member=member, group=group).first()
        
        member_months_data.append({
            'member': member,
            'summary': summary,
            'monthly_status': monthly_status,
        })
    
    context = {
        'group': group,
        'group_leader': group_leader,
        'members': members,
        'total_members': total_members,
        'total_contributions': total_contributions,
        'total_disbursements': total_disbursements,
        'current_balance': current_balance,
        'recent_contributions': recent_contributions,
        'group_leaders': group_leaders,
        'months_list': months_list,
        'member_months_data': member_months_data,
        'check_months': check_months,
    }
    
    return render(request, 'group_detail.html', context)

from django.core.paginator import Paginator
from django.http import JsonResponse
from django.db.models import Q

from django.core.paginator import Paginator
from django.http import JsonResponse
from django.db.models import Q
from django.shortcuts import get_object_or_404
from django.contrib.auth.decorators import login_required

@login_required
def group_contributions_ajax(request, group_id):
    """AJAX endpoint - onyesha contribution na period yake"""
    try:
        group = get_object_or_404(Group, id=group_id)
        group_leader = get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
        
        contributions = Contribution.objects.filter(group=group).select_related('member')
        
        search_term = request.GET.get('search', '').strip()
        if search_term:
            contributions = contributions.filter(
                Q(member__full_name__icontains=search_term) |
                Q(reference_number__icontains=search_term)
            )
        
        contributions = contributions.order_by('-payment_date', '-id')
        
        per_page = int(request.GET.get('per_page', 20))
        paginator = Paginator(contributions, per_page)
        page_number = request.GET.get('page', 1)
        page_obj = paginator.get_page(page_number)
        
        data = []
        for c in page_obj:
            # Get allocations to determine period
            allocations = c.allocations.all().order_by('year', 'month')
            period_text = ""
            if allocations.exists():
                first = allocations.first()
                last = allocations.last()
                if first.year == last.year and first.month == last.month:
                    period_text = f"(Mwezi {first.month})"
                else:
                    period_text = f"(Mwezi {first.month}-{last.month}/{last.year})"
            
            data.append({
                'id': c.id,
                'payment_date': c.payment_date.isoformat(),
                'member_name': c.member.full_name if c.member.full_name else f"Mwanachama {c.member.id}",
                'amount': float(c.amount),
                'reference_number': c.reference_number,
                'period_text': period_text,  # HII MPYA
            })
        
        return JsonResponse({
            'success': True,
            'data': data,
            'pagination': {
                'current_page': page_obj.number,
                'total_pages': paginator.num_pages,
                'has_next': page_obj.has_next(),
                'has_previous': page_obj.has_previous(),
                'total_items': paginator.count,
            }
        })
    except Exception as e:
        return JsonResponse({'success': False, 'error': str(e)}, status=500)

@login_required
def group_members_ajax(request, group_id):
    """AJAX endpoint kwa ajili ya wanachama"""
    from django.urls import reverse
    
    try:
        group = get_object_or_404(Group, id=group_id)
        group_leader = get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
        
        members = Member.objects.filter(group=group, is_active=True)
        
        search_term = request.GET.get('search', '').strip()
        if search_term:
            members = members.filter(
                Q(full_name__icontains=search_term) |
                Q(phone_number__icontains=search_term)
            )
        
        members = members.order_by('-joined_at')
        
        per_page = int(request.GET.get('per_page', 15))
        paginator = Paginator(members, per_page)
        page_number = request.GET.get('page', 1)
        page_obj = paginator.get_page(page_number)
        
        data = []
        for m in page_obj:
            # Build profile link for each member
            profile_link = request.build_absolute_uri(
                reverse('edit_member_profile', args=[group.id, m.id])
            )
            
            data.append({
                'id': m.id,
                'full_name': m.full_name,
                'phone_number': m.phone_number,
                'secret_pin': m.secret_pin,
                'joined_at': m.joined_at.isoformat(),
                'profile_link': profile_link,  # HII MPYA
            })
        
        return JsonResponse({
            'success': True,
            'data': data,
            'pagination': {
                'current_page': page_obj.number,
                'total_pages': paginator.num_pages,
                'has_next': page_obj.has_next(),
                'has_previous': page_obj.has_previous(),
                'total_items': paginator.count,
            }
        })
    except Exception as e:
        return JsonResponse({'success': False, 'error': str(e)}, status=500)

# @login_required
# def group_members_ajax(request, group_id):
#     """AJAX endpoint kwa ajili ya wanachama wenye pagination"""
#     try:
#         group = get_object_or_404(Group, id=group_id)
        
#         # Hakikisha kiongozi huyu ana uhusiano na kikundi hiki
#         group_leader = get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
        
#         # Get members
#         members = Member.objects.filter(group=group, is_active=True)
        
#         # Search filter
#         search_term = request.GET.get('search', '').strip()
#         if search_term:
#             members = members.filter(
#                 Q(full_name__icontains=search_term) |
#                 Q(phone_number__icontains=search_term)
#             )
        
#         # Order by joined date (most recent first)
#         members = members.order_by('-joined_at')
        
#         # Pagination - wanachama 15 kwa page
#         per_page = int(request.GET.get('per_page', 15))
#         paginator = Paginator(members, per_page)
#         page_number = request.GET.get('page', 1)
#         page_obj = paginator.get_page(page_number)
        
#         # Prepare data for JSON response
#         data = []
#         for m in page_obj:
#             data.append({
#                 'id': m.id,
#                 'full_name': m.full_name,
#                 'phone_number': m.phone_number,
#                 'secret_pin': m.secret_pin,
#                 'joined_at': m.joined_at.isoformat(),
#             })
        
#         return JsonResponse({
#             'success': True,
#             'data': data,
#             'pagination': {
#                 'current_page': page_obj.number,
#                 'total_pages': paginator.num_pages,
#                 'has_next': page_obj.has_next(),
#                 'has_previous': page_obj.has_previous(),
#                 'total_items': paginator.count,
#             }
#         })
#     except Exception as e:
#         return JsonResponse({'success': False, 'error': str(e)}, status=500)

# ==================== USAJILI WA VIONGOZI WENGINE (KWA MWENYEKITI) ====================

@login_required
def add_leader(request, group_id):
    """Mwenyekiti anaongeza kiongozi mwingine"""
    group = get_object_or_404(Group, id=group_id)
    
    # Hakikisha mtu huyu ana uwezo wa kuongeza viongozi (mwenyekiti pekee)
    group_leader = get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    if not group_leader.position.can_add_leaders:
        messages.error(request, "Huna uwezo wa kuongeza viongozi. Wewe si mwenyekiti wa kikundi hiki.")
        return redirect('group_detail', group_id=group.id)
    
    if request.method == 'POST':
        form = AddLeaderForm(request.POST, group=group)  # Pitisha group
        if form.is_valid():
            phone = form.cleaned_data['phone_number']
            position = form.cleaned_data['position']
            password = form.cleaned_data['password']
            full_name = form.cleaned_data.get('full_name', '')
            
            # Angalia kama kiongozi huyu tayari yupo
            leader, created = Leader.objects.get_or_create(
                phone_number=phone,
                defaults={'added_by': request.user, 'full_name': full_name}
            )
            
            if created:
                leader.set_password(password)
                if full_name:
                    leader.full_name = full_name
                leader.save()
            else:
                # Kama tayari yupo, angalia kama tayari ni kiongozi wa kikundi hiki
                if GroupLeader.objects.filter(group=group, leader=leader, is_active=True).exists():
                    messages.error(request, f"Kiongozi huyu tayari yupo kwenye kikundi hiki.")
                    return redirect('group_detail', group_id=group.id)
            
            # Muunganishe na kikundi
            GroupLeader.objects.create(
                group=group,
                leader=leader,
                position=position,
                appointed_by=request.user
            )
            
            ActivityLog.objects.create(
                group=group,
                action='add_leader',
                description=f"{request.user.get_full_name()} alimwongeza {leader.get_full_name()} kama {position.name}",
                performed_by=request.user
            )
            
            messages.success(request, f"{leader.get_full_name()} ameongezwa kama {position.name} wa kikundi.")
            return redirect('group_detail', group_id=group.id)
    else:
        form = AddLeaderForm(group=group)
    
    return render(request, 'add_leader.html', {'form': form, 'group': group})

@login_required
def reset_leader_password(request, group_id, leader_id):
    """Mwenyekiti anabadilisha password ya kiongozi mwingine (akisahau)"""
    group = get_object_or_404(Group, id=group_id)
    target_leader = get_object_or_404(Leader, id=leader_id)
    
    # Hakikisha mtu huyu ana uwezo (mwenyekiti)
    group_leader = get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    if not group_leader.position.can_reset_passwords:
        messages.error(request, "Huna uwezo wa kubadilisha passwords za viongozi wengine.")
        return redirect('group_detail', group_id=group.id)
    
    if request.method == 'POST':
        new_password = request.POST.get('new_password')
        if new_password:
            target_leader.set_password(new_password)
            target_leader.save()
            
            ActivityLog.objects.create(
                group=group,
                action='other',
                description=f"{request.user.get_full_name()} alibadilisha password ya {target_leader.get_full_name()}",
                performed_by=request.user
            )
            
            messages.success(request, f"Password ya {target_leader.get_full_name()} imebadilishwa.")
        return redirect('group_detail', group_id=group.id)
    
    return render(request, 'reset_password.html', {'target_leader': target_leader, 'group': group})


# ==================== USAJILI WA WANACHAMA ====================

@login_required
def add_member(request, group_id):
    """Kiongozi anaongeza mwanachama mpya"""
    group = get_object_or_404(Group, id=group_id)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    if request.method == 'POST':
        form = MemberForm(request.POST)
        if form.is_valid():
            member = form.save(commit=False)
            member.group = group
            member.added_by = request.user
            member.save()
            
            # Unda muhtasari wake
            MemberSummary.objects.create(member=member, group=group)
            
            ActivityLog.objects.create(
                group=group,
                action='add_member',
                description=f"{request.user.get_full_name()} alimwongeza {member.full_name} kama mwanachama",
                performed_by=request.user
            )
            
            messages.success(request, f"Mwanachama {member.full_name} ameongezwa! PIN yake ni: {member.secret_pin}")
            return redirect('group_detail', group_id=group.id)
    else:
        form = MemberForm()
    
    return render(request, 'add_member.html', {'form': form, 'group': group})

# ==================== VIEWS ZA MICHANGO ====================

from decimal import Decimal

def add_months(date, months):
    """Ongeza miezi kwa tarehe"""
    month = date.month - 1 + months
    year = date.year + month // 12
    month = month % 12 + 1
    day = date.day
    
    # Get days in month
    if month == 2:
        if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
            days_in_month = 29
        else:
            days_in_month = 28
    elif month in [4, 6, 9, 11]:
        days_in_month = 30
    else:
        days_in_month = 31
    
    if day > days_in_month:
        day = days_in_month
    
    return date.replace(year=year, month=month, day=day)

from dateutil.relativedelta import relativedelta
from decimal import Decimal

@login_required
def record_contribution(request, group_id):
    """Kiongozi anarekodi mchango - unaweza kugawa kwa miezi mingi"""
    group = get_object_or_404(Group, id=group_id)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    if request.method == 'POST':
        form = ContributionForm(request.POST, group=group)
        if form.is_valid():
            amount = form.cleaned_data['amount']
            member = form.cleaned_data['member']
            reference_number = form.cleaned_data['reference_number']
            payment_date = form.cleaned_data['payment_date']
            notes = form.cleaned_data.get('notes', '')
            
            from_month = form.cleaned_data['period_from_month']
            from_year = form.cleaned_data['period_from_year']
            to_month = form.cleaned_data['period_to_month']
            to_year = form.cleaned_data['period_to_year']
            months_count = form.cleaned_data['_months_count']
            monthly_amount = form.cleaned_data['_monthly_amount']
            
            # Convert to integers
            from_month = int(from_month)
            from_year = int(from_year)
            to_month = int(to_month)
            to_year = int(to_year)
            months_count = int(months_count)
            monthly_amount = float(monthly_amount) if monthly_amount else 0
            
            # Create the contribution
            contribution = Contribution(
                member=member,
                group=group,
                amount=amount,
                reference_number=reference_number,
                payment_date=payment_date,
                recorded_by=request.user,
                notes=notes,
                payment_month=from_month,
                payment_year=from_year
            )
            contribution.save()
            
            # Create allocations for each month
            from datetime import date
            current_date = date(from_year, from_month, 1)
            end_date = date(to_year, to_month, 1)
            
            while current_date <= end_date:
                ContributionAllocation.objects.create(
                    contribution=contribution,
                    member=member,
                    group=group,
                    month=current_date.month,
                    year=current_date.year,
                    amount=monthly_amount,
                    allocated_by=request.user,
                    notes=f"Allocated from contribution {reference_number}"
                )
                # Move to next month
                if current_date.month == 12:
                    current_date = date(current_date.year + 1, 1, 1)
                else:
                    current_date = date(current_date.year, current_date.month + 1, 1)
            
            # Update member summary
            summary, _ = MemberSummary.objects.get_or_create(member=member, group=group)
            summary.total_contributed += amount
            summary.last_contribution_date = payment_date
            summary.last_contribution_amount = amount
            summary.save()
            
            # Log activity
            if months_count > 1:
                description = f"{request.user.get_full_name()} alirekodi mchango wa Tsh {amount:,.0f} kwa {member.full_name} kwa miezi {months_count} ({from_month}/{from_year} - {to_month}/{to_year})"
            else:
                description = f"{request.user.get_full_name()} alirekodi mchango wa Tsh {amount:,.0f} kwa {member.full_name}"
            
            ActivityLog.objects.create(
                group=group,
                action='record_contribution',
                description=description,
                performed_by=request.user
            )
            
            messages.success(request, f"Mchango umerekodiwa! {months_count} months x Tsh {monthly_amount:,.0f} = Tsh {amount:,.0f}")
            return redirect('group_detail', group_id=group.id)
    else:
        form = ContributionForm(group=group)
    
    return render(request, 'record_contribution.html', {'form': form, 'group': group})

@login_required
def edit_contribution(request, group_id, contribution_id):
    """Kuhariri mchango uliopo - pamoja na kurekebisha allocations"""
    from django.utils import timezone
    from datetime import date
    
    group = get_object_or_404(Group, id=group_id)
    contribution = get_object_or_404(Contribution, id=contribution_id, group=group)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    old_amount = contribution.amount
    is_batch = contribution.allocations.count() > 1
    
    if request.method == 'POST':
        form = EditContributionForm(request.POST, instance=contribution)
        if form.is_valid():
            new_amount = form.cleaned_data['amount']
            
            # Get data from form
            from_month = form.cleaned_data.get('period_from_month')
            from_year = form.cleaned_data.get('period_from_year')
            to_month = form.cleaned_data.get('period_to_month')
            to_year = form.cleaned_data.get('period_to_year')
            
            # Convert to integers if they exist
            if from_month and from_year and to_month and to_year:
                from_month = int(from_month)
                from_year = int(from_year)
                to_month = int(to_month)
                to_year = int(to_year)
            
            # Save contribution - set payment_month and payment_year from period_from
            contribution = form.save(commit=False)
            
            # Use from_month and from_year
            if from_month and from_year:
                contribution.payment_month = from_month
                contribution.payment_year = from_year
            
            contribution.save()
            
            # If has allocations, recreate them
            if from_month and from_year and to_month and to_year:
                # Delete existing allocations
                contribution.allocations.all().delete()
                
                # Calculate monthly amount
                months_count = (to_year - from_year) * 12 + (to_month - from_month) + 1
                monthly_amount = new_amount / months_count
                
                # Create new allocations
                current_date = date(from_year, from_month, 1)
                end_date = date(to_year, to_month, 1)
                
                while current_date <= end_date:
                    ContributionAllocation.objects.create(
                        contribution=contribution,
                        member=contribution.member,
                        group=group,
                        month=current_date.month,
                        year=current_date.year,
                        amount=monthly_amount,
                        allocated_by=request.user,
                        notes=f"Updated allocation after edit"
                    )
                    # Move to next month
                    if current_date.month == 12:
                        current_date = date(current_date.year + 1, 1, 1)
                    else:
                        current_date = date(current_date.year, current_date.month + 1, 1)
            
            # Update member summary
            summary, _ = MemberSummary.objects.get_or_create(member=contribution.member, group=group)
            summary.total_contributed = summary.total_contributed - old_amount + new_amount
            summary.last_contribution_date = contribution.payment_date
            summary.last_contribution_amount = new_amount
            summary.save()
            
            # Log activity
            ActivityLog.objects.create(
                group=group,
                action='edit_contribution',
                description=f"{request.user.get_full_name()} alihariri mchango wa {contribution.member.full_name} kutoka Tsh {old_amount} hadi Tsh {new_amount}",
                performed_by=request.user
            )
            
            messages.success(request, "Mchango umehaririwa!")
            return redirect('group_detail', group_id=group.id)
    else:
        form = EditContributionForm(instance=contribution)
        if is_batch:
            messages.info(request, f"⚠️ Mchango huu umegawiwa kwa miezi {contribution.allocations.count()}.")
    
    return render(request, 'edit_contribution.html', {
        'form': form,
        'group': group,
        'contribution': contribution,
        'is_batch': is_batch,
        'now': timezone.now()
    })

@login_required
def delete_contribution(request, group_id, contribution_id):
    """Kufuta mchango"""
    group = get_object_or_404(Group, id=group_id)
    contribution = get_object_or_404(Contribution, id=contribution_id, group=group)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    # Angalia kama ni batch contribution
    is_batch = '-M' in contribution.reference_number if contribution.reference_number else False
    
    if request.method == 'POST':
        member_name = contribution.member.full_name
        amount = contribution.amount
        
        # Sasisha member summary
        summary, _ = MemberSummary.objects.get_or_create(member=contribution.member, group=group)
        summary.total_contributed -= amount
        
        # Kama hii ndio contribution ya mwisho
        last_contrib = Contribution.objects.filter(
            member=contribution.member, 
            group=group
        ).exclude(id=contribution.id).order_by('-payment_date').first()
        
        if last_contrib:
            summary.last_contribution_date = last_contrib.payment_date
            summary.last_contribution_amount = last_contrib.amount
        else:
            summary.last_contribution_date = None
            summary.last_contribution_amount = 0
        
        summary.save()
        
        contribution.delete()
        
        ActivityLog.objects.create(
            group=group,
            action='delete_contribution',
            description=f"{request.user.get_full_name()} alifuta mchango wa Tsh {amount} wa {member_name}",
            performed_by=request.user
        )
        
        if is_batch:
            messages.warning(request, f"Mchango wa Tsh {amount} wa {member_name} umefutwa! ⚠️ Hii ilikuwa sehemu ya malipo ya miezi mingi.")
        else:
            messages.success(request, f"Mchango wa Tsh {amount} wa {member_name} umefutwa!")
        
        return redirect('group_detail', group_id=group.id)
    
    return render(request, 'delete_contribution.html', {
        'contribution': contribution, 
        'group': group,
        'is_batch': is_batch
    })

@login_required
def add_disbursement(request, group_id):
    """Kiongozi anatoa msaada kwa mwanachama mwenye shida"""
    group = get_object_or_404(Group, id=group_id)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    if request.method == 'POST':
        form = DisbursementForm(request.POST, request.FILES)
        if form.is_valid():
            disbursement = form.save(commit=False)
            disbursement.group = group
            disbursement.initiated_by = request.user
            disbursement.save()
            
            # Update member summary (kama mpokeaji ni mwanachama)
            try:
                member = Member.objects.get(phone_number=disbursement.recipient_phone, group=group)
                summary, _ = MemberSummary.objects.get_or_create(member=member, group=group)
                summary.total_received += disbursement.amount
                summary.save()
            except Member.DoesNotExist:
                pass  # Mpokeaji si mwanachama (ndugu, nk)
            
            ActivityLog.objects.create(
                group=group,
                action='add_disbursement',
                description=f"{request.user.get_full_name()} alitoa msaada wa Tsh {disbursement.amount} kwa {disbursement.recipient_name}",
                performed_by=request.user
            )
            
            messages.success(request, f"Msaada wa Tsh {disbursement.amount} umetolewa kwa {disbursement.recipient_name}!")
            return redirect('group_detail', group_id=group.id)
    else:
        form = DisbursementForm()
    
    return render(request, 'add_disbursement.html', {'form': form, 'group': group})


# ==================== RIPOTI ====================

@login_required
def group_reports(request, group_id):
    """Ripoti za kikundi (michango, misaada, wanachama binafsi)"""
    group = get_object_or_404(Group, id=group_id)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    # Ripoti ya michango yote
    contributions = Contribution.objects.filter(group=group).select_related('member', 'recorded_by')
    
    # Ripoti ya misaada yote
    disbursements = Disbursement.objects.filter(group=group)
    
    # Wanachama na muhtasari wao
    members_summary = MemberSummary.objects.filter(group=group).select_related('member')
    
    context = {
        'group': group,
        'contributions': contributions,
        'disbursements': disbursements,
        'members_summary': members_summary,
    }
    
    return render(request, 'group_reports.html', context)

# ==================== KUHARIRI NA KUFUTA WANACHAMA ====================

@login_required
def edit_member(request, group_id, member_id):
    """Kuhariri taarifa za mwanachama"""
    group = get_object_or_404(Group, id=group_id)
    member = get_object_or_404(Member, id=member_id, group=group)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    if request.method == 'POST':
        form = MemberForm(request.POST, instance=member)
        if form.is_valid():
            form.save()
            
            ActivityLog.objects.create(
                group=group,
                action='edit_member',
                description=f"{request.user.get_full_name()} alihariri taarifa za {member.full_name}",
                performed_by=request.user
            )
            
            messages.success(request, f"Taarifa za {member.full_name} zimehaririwa!")
            return redirect('group_detail', group_id=group.id)
    else:
        form = MemberForm(instance=member)
    
    return render(request, 'edit_member.html', {'form': form, 'group': group, 'member': member})


@login_required
def delete_member(request, group_id, member_id):
    """Kumwondoa mwanachama kwenye kikundi"""
    group = get_object_or_404(Group, id=group_id)
    member = get_object_or_404(Member, id=member_id, group=group)
    group_leader = get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    if not group_leader.position.can_delete_members:
        messages.error(request, "Huna uwezo wa kufuta wanachama.")
        return redirect('group_detail', group_id=group.id)
    
    if request.method == 'POST':
        member_name = member.full_name
        member.is_active = False
        member.save()
        
        ActivityLog.objects.create(
            group=group,
            action='delete_member',
            description=f"{request.user.get_full_name()} alimwondoa {member_name} kwenye kikundi",
            performed_by=request.user
        )
        
        messages.success(request, f"{member_name} ameondolewa kwenye kikundi.")
        return redirect('group_detail', group_id=group.id)
    
    return render(request, 'delete_member.html', {'member': member, 'group': group})

# ==================== KUHARIRI NA KUFUTA MISAADA ====================

@login_required
def edit_disbursement(request, group_id, disbursement_id):
    """Kuhariri msaada uliopo"""
    group = get_object_or_404(Group, id=group_id)
    disbursement = get_object_or_404(Disbursement, id=disbursement_id, group=group)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    old_amount = disbursement.amount
    old_recipient_phone = disbursement.recipient_phone
    
    if request.method == 'POST':
        form = EditDisbursementForm(request.POST, request.FILES, instance=disbursement)
        if form.is_valid():
            new_amount = form.cleaned_data['amount']
            new_recipient_phone = form.cleaned_data['recipient_phone']
            disbursement = form.save()
            
            # Sasisha member summary kwa mpokeaji wa zamani (kama alikuwa mwanachama)
            try:
                old_member = Member.objects.get(phone_number=old_recipient_phone, group=group)
                old_summary, _ = MemberSummary.objects.get_or_create(member=old_member, group=group)
                old_summary.total_received -= old_amount
                old_summary.save()
            except Member.DoesNotExist:
                pass
            
            # Sasisha member summary kwa mpokeaji mpya
            try:
                new_member = Member.objects.get(phone_number=new_recipient_phone, group=group)
                new_summary, _ = MemberSummary.objects.get_or_create(member=new_member, group=group)
                new_summary.total_received += new_amount
                new_summary.save()
            except Member.DoesNotExist:
                pass
            
            ActivityLog.objects.create(
                group=group,
                action='edit_disbursement',
                description=f"{request.user.get_full_name()} alihariri msaada wa Tsh {old_amount} hadi Tsh {new_amount} kwa {disbursement.recipient_name}",
                performed_by=request.user
            )
            
            messages.success(request, "Msaada umehaririwa!")
            return redirect('group_detail', group_id=group.id)
    else:
        form = EditDisbursementForm(instance=disbursement)
    
    return render(request, 'edit_disbursement.html', {'form': form, 'group': group, 'disbursement': disbursement})


@login_required
def delete_disbursement(request, group_id, disbursement_id):
    """Kufuta msaada"""
    group = get_object_or_404(Group, id=group_id)
    disbursement = get_object_or_404(Disbursement, id=disbursement_id, group=group)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    if request.method == 'POST':
        recipient_name = disbursement.recipient_name
        amount = disbursement.amount
        recipient_phone = disbursement.recipient_phone
        
        # Sasisha member summary (kama mpokeaji ni mwanachama)
        try:
            member = Member.objects.get(phone_number=recipient_phone, group=group)
            summary, _ = MemberSummary.objects.get_or_create(member=member, group=group)
            summary.total_received -= amount
            summary.save()
        except Member.DoesNotExist:
            pass
        
        disbursement.delete()
        
        ActivityLog.objects.create(
            group=group,
            action='delete_disbursement',
            description=f"{request.user.get_full_name()} alifuta msaada wa Tsh {amount} kwa {recipient_name}",
            performed_by=request.user
        )
        
        messages.success(request, "Msaada umefutwa!")
        return redirect('group_detail', group_id=group.id)
    
    return render(request, 'delete_disbursement.html', {'disbursement': disbursement, 'group': group})


# ==================== RIPOTI YA MWANACHAMA MMOJA ====================

@login_required
def member_report(request, group_id, member_id):
    """Ripoti kamili ya mwanachama mmoja"""
    group = get_object_or_404(Group, id=group_id)
    member = get_object_or_404(Member, id=member_id, group=group)
    get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    contributions = member.contributions.all().order_by('-payment_date')
    disbursements = Disbursement.objects.filter(group=group, recipient_phone=member.phone_number).order_by('-disbursement_date')
    summary, _ = MemberSummary.objects.get_or_create(member=member, group=group)
    
    context = {
        'group': group,
        'member': member,
        'contributions': contributions,
        'disbursements': disbursements,
        'summary': summary,
    }
    
    return render(request, 'member_report.html', context)


# ==================== KUBADILISHA PASSWORD YA KIONGOZI ====================

@login_required
def reset_leader_password(request, group_id, leader_id):
    """Mwenyekiti anabadilisha password ya kiongozi mwingine"""
    group = get_object_or_404(Group, id=group_id)
    target_leader = get_object_or_404(Leader, id=leader_id)
    
    # Hakikisha mtu huyu ana uwezo (mwenyekiti au mwenye ruhusa)
    group_leader = get_object_or_404(GroupLeader, group=group, leader=request.user, is_active=True)
    
    if not group_leader.position.can_reset_passwords:
        messages.error(request, "Huna uwezo wa kubadilisha passwords za viongozi wengine.")
        return redirect('group_detail', group_id=group.id)
    
    # Hakikisha hajibadilishi password yake mwenyewe kwa njia hii
    if target_leader.id == request.user.id:
        messages.error(request, "Huwezi kubadilisha password yako mwenyewe hapa. Tumia feature ya kubadilisha password kwenye profile yako.")
        return redirect('group_detail', group_id=group.id)
    
    if request.method == 'POST':
        new_password = request.POST.get('new_password')
        new_password_confirm = request.POST.get('new_password_confirm')
        
        if not new_password or len(new_password) < 4:
            messages.error(request, "Nenosiri lazima liwe na herufi 4 au zaidi.")
        elif new_password != new_password_confirm:
            messages.error(request, "Manenosiri hayalingani.")
        else:
            target_leader.set_password(new_password)
            target_leader.save()
            
            ActivityLog.objects.create(
                group=group,
                action='other',
                description=f"{request.user.get_full_name()} alibadilisha password ya {target_leader.get_full_name()}",
                performed_by=request.user
            )
            
            messages.success(request, f"Password ya {target_leader.get_full_name()} imebadilishwa.")
            return redirect('group_detail', group_id=group.id)
    
    return render(request, 'reset_leader_password.html', {'target_leader': target_leader, 'group': group})


# ==================== SHARE FUNCTIONALITY ====================

def generate_share_message(request, share_type, object_id):
    """Tengeneza ujumbe wa kushiriki kwa WhatsApp au SMS"""
    from django.http import JsonResponse
    from django.contrib.humanize.templatetags.humanize import intcomma
    
    if share_type == 'member':
        member = get_object_or_404(Member, id=object_id)
        summary, _ = MemberSummary.objects.get_or_create(member=member, group=member.group)
        
        total_contributed = intcomma(int(summary.total_contributed)) if summary.total_contributed else "0"
        total_received = intcomma(int(summary.total_received)) if summary.total_received else "0"
        last_contribution = summary.last_contribution_date.strftime("%d/%m/%Y") if summary.last_contribution_date else "Bado"
        
        message = f"""*TAARIFA ZA MWANACHAMA - HUDUMALINK*

Jina: {member.full_name}
Kikundi: {member.group.name}
Namba: {member.phone_number}
PIN: {member.secret_pin}

*MUHTASARI:*
Jumla ya michango: Tsh {total_contributed}
Misaada aliyopokea: Tsh {total_received}
Mchango wa mwisho: {last_contribution}

HudumaLink.co.tz - Kusimamia vikundi kwa urahisi"""
    
    elif share_type == 'group':
        group = get_object_or_404(Group, id=object_id)
        total_members = group.members.filter(is_active=True).count()
        total_contributions = Contribution.objects.filter(group=group).aggregate(Sum('amount'))['amount__sum'] or 0
        total_disbursements = Disbursement.objects.filter(group=group).aggregate(Sum('amount'))['amount__sum'] or 0
        current_balance = total_contributions - total_disbursements
        
        total_contributions_fmt = intcomma(int(total_contributions))
        total_disbursements_fmt = intcomma(int(total_disbursements))
        current_balance_fmt = intcomma(int(current_balance))
        
        m_koba_text = f"\nM-Koba: {group.m_koba_number}" if group.m_koba_number else ""
        
        message = f"""*TAARIFA ZA KIKUNDI - HUDUMALINK*

Jina: {group.name}{m_koba_text}

*TAKWIMU:*
Wanachama: {total_members}
Michango yote: Tsh {total_contributions_fmt}
Misaada yote: Tsh {total_disbursements_fmt}
Salio: Tsh {current_balance_fmt}

HudumaLink.co.tz - Kusimamia vikundi kwa urahisi"""
    
    elif share_type == 'contribution':
        contribution = get_object_or_404(Contribution, id=object_id)
        
        amount_fmt = intcomma(int(contribution.amount))
        payment_date_fmt = contribution.payment_date.strftime("%d/%m/%Y")
        
        message = f"""*TAARIFA YA MCHANGO - HUDUMALINK*

Mwanachama: {contribution.member.full_name}
Kikundi: {contribution.group.name}
Kiasi: Tsh {amount_fmt}
Tarehe: {payment_date_fmt}
Reference: {contribution.reference_number}

HudumaLink.co.tz - Kusimamia vikundi kwa urahisi"""
    
    else:
        message = "HudumaLink - Simamia vikundi vyako kwa urahisi"
    
    if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
        return JsonResponse({'message': message})
    
    return render(request, 'share_message.html', {'message': message, 'share_type': share_type})
    
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib import messages
from .models import MemberProfile, Member
from .forms import MemberProfileForm

# views.py - Badilisha edit_member_profile (Ondoa PIN verification)

def edit_member_profile(request, group_id, member_id):
    """
    Mwanachama anahariri profaili yake - HAKUNA LOGIN REQUIRED
    Mwanachama tayari amethibitishwa kwa PIN kwenye member_lookup
    """
    from django.contrib import messages
    from django.shortcuts import render, get_object_or_404, redirect
    from .models import Group, Member, MemberProfile
    from .forms import MemberProfileForm
    
    group = get_object_or_404(Group, id=group_id)
    member = get_object_or_404(Member, id=member_id, group=group)
    
    # Tafuta profile au uunde mpya
    profile, created = MemberProfile.objects.get_or_create(member=member, group=group)
    
    if request.method == 'POST':
        form = MemberProfileForm(request.POST, instance=profile)
        if form.is_valid():
            profile = form.save(commit=False)
            profile.filled_by = None  # Si leader, ni mwanachama mwenyewe
            profile.save()
            messages.success(request, "Profaili yako imehifadhiwa kikamilifu!")
            return redirect('member_profile_view', group_id=group.id, member_id=member.id)
        else:
            messages.error(request, "Tafadhali sahihisha makosa kwenye fomu.")
    else:
        form = MemberProfileForm(instance=profile)
    
    return render(request, 'edit_member_profile.html', {
        'form': form,
        'group': group,
        'member': member,
        'profile': profile,
    })
    
def member_profile_view(request, group_id, member_id):
    """
    Ukurasa wa kuona profaili ya mwanachama - HAKUNA LOGIN REQUIRED
    Yeyote anayefikia anaweza kuona (kwa sasa)
    """
    from django.shortcuts import render, get_object_or_404
    from .models import Group, Member, MemberProfile
    
    group = get_object_or_404(Group, id=group_id)
    member = get_object_or_404(Member, id=member_id, group=group)
    
    # Get or create profile
    profile, created = MemberProfile.objects.get_or_create(member=member, group=group)
    
    # Kwa sasa, tunaonyesha profaili kwa yeyote anayefika
    # Tunaweza kuangalia kama mtazamaji ni mwanachama wa kikundi hiki
    # Hili linaweza kufanyika kwa kuangalia session au cookie, lakini kwa urahisi:
    # - Kiongozi anaweza kuona kila kitu
    # - Mwanachama mwengine anaweza kuona kulingana na privacy settings
    
    context = {
        'group': group,
        'member': member,
        'profile': profile,
        'can_edit': True,  # Mwanachama mwenyewe anaweza kuhariri (kwa PIN)
    }
    
    return render(request, 'member_profile_view.html', context)

@login_required
def member_directory(request, group_id):
    """Ukurasa wa kuona orodha ya wanachama na kutafuta"""
    group = get_object_or_404(Group, id=group_id)
    
    # Hakikisha ni kiongozi
    if not GroupLeader.objects.filter(group=group, leader=request.user, is_active=True).exists():
        messages.error(request, "Huna ruhusa ya kuona orodha hii.")
        return redirect('group_detail', group_id=group.id)
    
    members = group.members.filter(is_active=True)
    
    # Search functionality
    search_query = request.GET.get('q', '')
    skill_filter = request.GET.get('skill', '')
    region_filter = request.GET.get('region', '')
    profession_filter = request.GET.get('profession', '')
    
    if search_query:
        members = members.filter(
            Q(full_name__icontains=search_query) |
            Q(profile__profession__icontains=search_query) |
            Q(profile__skills__icontains=search_query) |
            Q(profile__business_name__icontains=search_query)
        )
    
    # Annotate with profile data for filtering
    from django.db.models import Q, Value, CharField
    from django.db.models.functions import Coalesce
    
    # Get unique values for filters
    all_skills = MemberProfile.objects.filter(group=group).exclude(skills__isnull=True).exclude(skills='').values_list('skills', flat=True)
    all_regions = MemberProfile.objects.filter(group=group).exclude(region__isnull=True).exclude(region='').values_list('region', flat=True).distinct()
    all_professions = MemberProfile.objects.filter(group=group).exclude(profession__isnull=True).exclude(profession='').values_list('profession', flat=True).distinct()
    
    context = {
        'group': group,
        'members': members,
        'search_query': search_query,
        'skill_filter': skill_filter,
        'region_filter': region_filter,
        'profession_filter': profession_filter,
        'all_skills': list(set([s for sk in all_skills for s in sk.split(',') if s.strip()])),
        'all_regions': all_regions,
        'all_professions': all_professions,
    }
    
    return render(request, 'member_directory.html', context)    
    
    