#!/usr/bin/env python3
import os
import sys
import django

# プロジェクト設定
sys.path.append('/app')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
django.setup()

from django.db import connection, transaction
import logging

# ログ設定
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def assign_zekken_numbers_to_fc_gifu():
    """FC岐阜イベント（ID:10）のチームにゼッケン番号を割り当て"""
    
    print("=== FC岐阜イベントチームゼッケン番号割り当て ===")
    
    with connection.cursor() as cursor:
        # 1. FC岐阜イベントの現状確認
        print("\n1. FC岐阜イベント（ID:10）現状確認:")
        cursor.execute("""
            SELECT t.id, t.team_name, t.zekken_number, t.event_id
            FROM rog_team t
            JOIN rog_entry e ON t.id = e.team_id
            WHERE e.event_id = 10
            ORDER BY t.id;
        """)
        fc_teams = cursor.fetchall()
        
        print(f"  FC岐阜関連チーム数: {len(fc_teams)}")
        print("  現在の状況:")
        for team in fc_teams[:5]:  # 最初の5件のみ表示
            print(f"    Team ID:{team[0]}, Name:{team[1]}, Zekken:{team[2]}, Event:{team[3]}")
        
        # 2. ゼッケン番号が未設定のチームを特定
        teams_without_zekken = [team for team in fc_teams if not team[2]]
        print(f"\n  ゼッケン番号未設定チーム数: {len(teams_without_zekken)}")
        
        if not teams_without_zekken:
            print("  🎉 すべてのチームにゼッケン番号が設定済み")
            return
        
        # 3. 既存のゼッケン番号を確認（競合回避）
        print("\n2. 既存ゼッケン番号確認:")
        cursor.execute("""
            SELECT zekken_number 
            FROM rog_team 
            WHERE zekken_number IS NOT NULL AND zekken_number != ''
            ORDER BY zekken_number;
        """)
        existing_zekkens = [row[0] for row in cursor.fetchall()]
        print(f"  既存ゼッケン番号: {existing_zekkens}")
        
        # 4. ユーザー確認
        print(f"\n3. ゼッケン番号割り当て準備:")
        print(f"  対象チーム数: {len(teams_without_zekken)}")
        print(f"  割り当て予定ゼッケン番号: FC001-FC{len(teams_without_zekken):03d}")
        
        confirm = input("\n  ゼッケン番号を割り当てますか？ (y/N): ")
        if confirm.lower() != 'y':
            print("  処理をキャンセルしました")
            return
        
        # 5. ゼッケン番号割り当て実行
        print("\n4. ゼッケン番号割り当て実行:")
        with transaction.atomic():
            for i, team in enumerate(teams_without_zekken, 1):
                team_id = team[0]
                team_name = team[1]
                zekken_number = f"FC{i:03d}"
                
                cursor.execute("""
                    UPDATE rog_team 
                    SET zekken_number = %s, updated_at = NOW()
                    WHERE id = %s;
                """, [zekken_number, team_id])
                
                print(f"    Team ID:{team_id} ({team_name}) → ゼッケン番号: {zekken_number}")
        
        print(f"\n  ✅ {len(teams_without_zekken)}チームにゼッケン番号を割り当てました")
        
        # 6. 結果確認
        print("\n5. 割り当て結果確認:")
        cursor.execute("""
            SELECT t.id, t.team_name, t.zekken_number
            FROM rog_team t
            JOIN rog_entry e ON t.id = e.team_id
            WHERE e.event_id = 10 AND t.zekken_number IS NOT NULL
            ORDER BY t.zekken_number;
        """)
        updated_teams = cursor.fetchall()
        
        print(f"  ゼッケン番号付きチーム数: {len(updated_teams)}")
        print("  割り当て結果（サンプル）:")
        for team in updated_teams[:10]:
            print(f"    {team[2]}: {team[1]} (ID:{team[0]})")
        
        # 7. 通過審査管理画面での影響確認
        print("\n6. 通過審査管理画面への影響:")
        print("  これで通過審査管理画面で以下が表示されるはずです:")
        print("  - ALL（全参加者）")
        for team in updated_teams[:5]:
            print(f"  - {team[2]}（{team[1]}）")
        print("  - ...")

def reset_zekken_numbers():
    """FC岐阜イベントのゼッケン番号をリセット（テスト用）"""
    print("\n=== ゼッケン番号リセット（テスト用） ===")
    
    with connection.cursor() as cursor:
        confirm = input("FC岐阜イベントのゼッケン番号をリセットしますか？ (y/N): ")
        if confirm.lower() != 'y':
            print("リセットをキャンセルしました")
            return
        
        with transaction.atomic():
            cursor.execute("""
                UPDATE rog_team 
                SET zekken_number = NULL, updated_at = NOW()
                WHERE id IN (
                    SELECT DISTINCT t.id 
                    FROM rog_team t
                    JOIN rog_entry e ON t.id = e.team_id
                    WHERE e.event_id = 10
                );
            """)
            
            affected_rows = cursor.rowcount
            print(f"✅ {affected_rows}チームのゼッケン番号をリセットしました")

if __name__ == "__main__":
    try:
        import sys
        if len(sys.argv) > 1 and sys.argv[1] == '--reset':
            reset_zekken_numbers()
        else:
            assign_zekken_numbers_to_fc_gifu()
    except Exception as e:
        print(f"❌ エラーが発生しました: {e}")
        import traceback
        traceback.print_exc()
