#!/usr/bin/env python
"""
중복된 Person 데이터를 정리하는 스크립트
"""

import os
import sys
import django

# Django 설정
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'A_core.settings')
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
django.setup()

from B_main.models import Person
from django.contrib.auth.models import User

def clean_duplicates():
    """중복된 Person 데이터 정리"""
    print("=" * 60)
    print("중복 Person 데이터 정리")
    print("=" * 60)
    
    # 전화번호별로 그룹화
    phone_groups = {}
    for person in Person.objects.all():
        if person.연락처:
            if person.연락처 not in phone_groups:
                phone_groups[person.연락처] = []
            phone_groups[person.연락처].append(person)
    
    deleted_count = 0
    
    for phone, persons in phone_groups.items():
        if len(persons) > 1:
            print(f"\n전화번호 {phone}에 대한 중복 발견:")
            
            # 회원가입 상태별로 분류
            registered = [p for p in persons if p.회원가입상태 == '회원가입']
            not_registered = [p for p in persons if p.회원가입상태 == '미가입']
            withdrawn = [p for p in persons if p.회원가입상태 == '탈퇴']
            
            print(f"  회원가입: {len(registered)}개")
            print(f"  미가입: {len(not_registered)}개")
            print(f"  탈퇴: {len(withdrawn)}개")
            
            # 정리 로직
            if registered:
                # 회원가입된 것이 있으면 나머지 삭제
                keep_person = registered[0]
                to_delete = persons[1:]  # 첫 번째 것 제외하고 모두 삭제
                
                print(f"  유지: {keep_person.이름} (ID: {keep_person.id}, 회원가입상태: {keep_person.회원가입상태})")
                
                for person in to_delete:
                    print(f"  삭제: {person.이름} (ID: {person.id}, 회원가입상태: {person.회원가입상태})")
                    person.delete()
                    deleted_count += 1
                    
            elif not_registered:
                # 미가입만 있으면 첫 번째 것만 유지
                keep_person = not_registered[0]
                to_delete = not_registered[1:] + withdrawn
                
                print(f"  유지: {keep_person.이름} (ID: {keep_person.id}, 회원가입상태: {keep_person.회원가입상태})")
                
                for person in to_delete:
                    print(f"  삭제: {person.이름} (ID: {person.id}, 회원가입상태: {person.회원가입상태})")
                    person.delete()
                    deleted_count += 1
                    
            elif withdrawn:
                # 탈퇴만 있으면 첫 번째 것만 유지
                keep_person = withdrawn[0]
                to_delete = withdrawn[1:]
                
                print(f"  유지: {keep_person.이름} (ID: {keep_person.id}, 회원가입상태: {keep_person.회원가입상태})")
                
                for person in to_delete:
                    print(f"  삭제: {person.이름} (ID: {person.id}, 회원가입상태: {person.회원가입상태})")
                    person.delete()
                    deleted_count += 1
    
    print(f"\n총 {deleted_count}개의 중복 데이터가 삭제되었습니다.")
    
    # 최종 확인
    print("\n최종 중복 확인:")
    final_phone_counts = {}
    for person in Person.objects.all():
        if person.연락처:
            final_phone_counts[person.연락처] = final_phone_counts.get(person.연락처, 0) + 1
    
    final_duplicates = {phone: count for phone, count in final_phone_counts.items() if count > 1}
    if final_duplicates:
        print("여전히 중복된 전화번호가 있습니다:")
        for phone, count in final_duplicates.items():
            print(f"  {phone}: {count}개")
    else:
        print("모든 중복이 해결되었습니다.")

if __name__ == '__main__':
    clean_duplicates() 