"""
Standalone One-Time Migration Script
Converts existing female/girl/women members to the new format and separate sequence: 'SRA-S####'.
Updates Member.member_id and linked User.username.
"""

import os
import sys
import django

# Ensure UTF-8 output on Windows terminal
if sys.stdout.encoding != 'utf-8':
    try:
        sys.stdout.reconfigure(encoding='utf-8')
    except Exception:
        pass

# Setup Django environment
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trust_portal.settings')
django.setup()

from django.contrib.auth.models import User
from django.db import transaction
from members.models import Member


def migrate_female_members():
    print("=" * 60)
    print("Starting One-Time Migration: Female Member IDs -> 'SRA-S####'")
    print("=" * 60)

    female_members = Member.objects.filter(gender='Female').order_by('id')
    total_females = female_members.count()
    print(f"Found {total_females} female member(s) in database.")

    if total_females == 0:
        print("No female members found to migrate.")
        return

    # Find highest existing SRA-S sequence number to prevent collisions
    max_num = 0
    for m in Member.objects.filter(member_id__startswith='SRA-S'):
        try:
            num = int(m.member_id[len('SRA-S'):])
            if num > max_num:
                max_num = num
        except (ValueError, TypeError, IndexError):
            pass

    current_seq = max_num
    migrated_count = 0

    with transaction.atomic():
        for member in female_members:
            if not member.member_id or not member.member_id.startswith('SRA-S'):
                current_seq += 1
                old_id = member.member_id
                new_id = f'SRA-S{current_seq:04d}'

                member.member_id = new_id
                member.save(update_fields=['member_id'])

                # Update linked user username if it was the old member_id
                user_updated = False
                if member.user and member.user.username == old_id:
                    member.user.username = new_id
                    member.user.save(update_fields=['username'])
                    user_updated = True

                migrated_count += 1
                print(f"[MIGRATED] Member #{member.id} ('{member.name}'): {old_id} -> {new_id}"
                      f"{' (Updated login username)' if user_updated else ''}")
            else:
                print(f"[SKIPPED] Member #{member.id} ('{member.name}') already has SRA-S format: {member.member_id}")

    print("=" * 60)
    print(f"Migration completed successfully. Migrated: {migrated_count}, Total: {total_females}")
    print("=" * 60)


if __name__ == '__main__':
    migrate_female_members()
