#!/usr/bin/env python
"""
수동으로 Person 데이터를 초기화하고 peopleinfo.py의 데이터로 채우는 스크립트

사용법:
python manage.py shell
exec(open('B_main/manual_populate.py').read())
"""

import os
import sys
import django
from datetime import datetime

# Django 설정
import sys
import os

# 프로젝트 루트 경로를 Python 경로에 추가
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, project_root)

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'A_core.settings')
django.setup()

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

def clear_existing_persons():
    """superuser를 제외한 모든 Person을 삭제"""
    print("기존 Person 데이터 정리 중...")
    
    # superuser들 찾기
    superusers = User.objects.filter(is_superuser=True)
    
    if superusers.exists():
        print(f"Superuser 발견: {superusers.count()}명")
        
        # 모든 superuser의 Person들을 보존
        preserved_persons = []
        for superuser in superusers:
            person = Person.objects.filter(user=superuser).first()
            if person:
                preserved_persons.append(person)
                print(f"보존할 Person: {person.이름} (ID: {superuser.id}, 이메일: {superuser.email})")
            else:
                print(f"Superuser {superuser.username} (ID: {superuser.id}, 이메일: {superuser.email}) - Person 없음")
        
        # 모든 Person 삭제 (superuser들 제외)
        deleted_count = Person.objects.exclude(user__in=superusers).delete()[0]
        print(f"삭제된 Person 수: {deleted_count}")
        
        # 보존된 Person 중 첫 번째를 반환 (또는 None)
        return preserved_persons[0] if preserved_persons else None
        
    else:
        print("Superuser를 찾을 수 없습니다.")
        # 모든 Person 삭제
        deleted_count = Person.objects.all().delete()[0]
        print(f"삭제된 Person 수: {deleted_count}")
        return None

def parse_birth_date(birth_str):
    """생년월일 문자열을 Date 객체로 변환"""
    if not birth_str or birth_str == '':
        return None
    
    try:
        # "1960.03.27" 형식을 파싱
        if '.' in birth_str:
            return datetime.strptime(birth_str, '%Y.%m.%d').date()
        # "1962" 형식도 처리
        elif len(birth_str) == 4:
            return datetime.strptime(f"{birth_str}.01.01", '%Y.%m.%d').date()
        else:
            return None
    except ValueError:
        print(f"생년월일 파싱 오류: {birth_str}")
        return None

def create_persons_from_peopleinfo():
    """peopleinfo.py의 데이터로 Person 객체 생성"""
    print("peopleinfo.py 데이터로 Person 생성 중...")
    
    created_count = 0
    error_count = 0
    
    for person_data in PEOPLE:
        try:
            # 기본 필드들
            name = person_data.get('이름', '')
            affiliation = person_data.get('소속', '')
            birth_date = parse_birth_date(person_data.get('생년월일', ''))
            position = person_data.get('직책', '')
            phone = person_data.get('연락처', '')
            address = person_data.get('주소', '')
            # 사진 경로에서 'media/' 접두사 제거
            photo = person_data.get('사진', 'profile_photos/default_user.png')
            if photo.startswith('media/'):
                photo = photo[6:]  # 'media/' 제거
            title = person_data.get('TITLE', '')
            sequence = person_data.get('SEQUENCE', None)
            
            # SEQUENCE를 정수로 변환
            if sequence and sequence != '':
                try:
                    sequence = int(sequence)
                except ValueError:
                    sequence = None
            else:
                sequence = None
            
            # 이미 존재하는지 확인
            existing_person = Person.objects.filter(이름=name, 연락처=phone).first()
            
            if existing_person:
                print(f"이미 존재하는 Person: {name} ({phone})")
                continue
            
            # 김봉수, 김태형만 보이게 설정, 나머지는 안보이게 설정
            show_in_main = name in ['김봉수', '김태형']
            
            # 새 Person 생성
            person = Person.objects.create(
                이름=name,
                소속=affiliation,
                생년월일=birth_date,
                직책=position,
                연락처=phone,
                주소=address,
                사진=photo,
                TITLE=title,
                SEQUENCE=sequence,
                보일지여부=show_in_main
            )
            
            created_count += 1
            print(f"생성됨: {name} ({phone})")
            
        except Exception as e:
            error_count += 1
            print(f"오류 발생 ({name}): {str(e)}")
            continue
    
    print(f"\n생성 완료: {created_count}개")
    print(f"오류 발생: {error_count}개")
    
    return created_count

def main():
    """메인 실행 함수"""
    print("=" * 50)
    print("Person 데이터 초기화 및 재생성")
    print("=" * 50)
    
    # 1. 기존 데이터 정리
    preserved_person = clear_existing_persons()
    
    # 2. peopleinfo.py 데이터로 새로 생성
    created_count = create_persons_from_peopleinfo()
    
    # 3. 결과 요약
    total_persons = Person.objects.count()
    print("\n" + "=" * 50)
    print("작업 완료!")
    print(f"총 Person 수: {total_persons}")
    if preserved_person:
        print(f"보존된 Person: {preserved_person.이름} (Superuser)")
    print("=" * 50)

if __name__ == "__main__":
    # 직접 실행
    main() 