import json
import random
import pymysql
from datetime import datetime, timedelta

# --- 数据库配置 (请根据你的实际 config 修改) ---
DB_CONFIG = {
    "host": "localhost",
    "user": "root",
    "password": "31031992",
    "database": "dating_fans",
    "charset": "utf8mb4"
}

def generate_sessions(target_date_str):
    # 定义扑克牌值（用于排序判定）
    card_order = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
    sessions = []
    
    # 设定起始时间：早上 9 点
    current_time = datetime.strptime(f"{target_date_str} 09:00:00", "%Y-%m-%d %H:%M:%S")
    # 设定结束时间：次日凌晨 2 点 (跨度 17 小时)
    end_time = current_time + timedelta(hours=17)
    
    counter = 1
    
    while current_time <= end_time:
        # 随机抽取 3 张不同的牌
        deck = random.sample(card_order, 3)
        # 前两张作为门柱，并按牌面大小排序
        posts = sorted(deck[:2], key=lambda x: card_order.index(x))
        target = deck[2]
        
        # 判定结果 (Inside/Outside)
        l_idx = card_order.index(posts[0])
        r_idx = card_order.index(posts[1])
        t_idx = card_order.index(target)
        
        winner = "Inside" if l_idx < t_idx < r_idx else "Outside"
        
        # 生成 Session ID: 20260507001
        session_id = f"{current_time.strftime('%Y%m%d')}{str(counter).zfill(3)}"
        
        sessions.append({
            "session_id": session_id,
            "left_post": posts[0],
            "right_post": posts[1],
            "target_card": target,
            "winner": winner,
            "start_time": current_time.strftime("%Y-%m-%d %H:%M:%S"),
            "open_time": (current_time + timedelta(minutes=4, seconds=50)).strftime("%Y-%m-%d %H:%M:%S")
        })
        
        current_time += timedelta(minutes=5)
        counter += 1
        
    return sessions

def save_to_database(sessions):
    connection = pymysql.connect(**DB_CONFIG)
    try:
        with connection.cursor() as cursor:
            # 准备 SQL 语句
            # 使用 INSERT IGNORE 防止重复运行脚本导致主键冲突
            sql = """
            INSERT IGNORE INTO acey_deucey_sessions 
            (session_id, left_post, right_post, target_card, winner, start_time, open_time, status) 
            VALUES (%s, %s, %s, %s, %s, %s, %s, 'open')
            """
            
            # 批量转换数据格式
            data_to_insert = [
                (
                    s['session_id'], 
                    s['left_post'], 
                    s['right_post'], 
                    s['target_card'], 
                    s['winner'], 
                    s['start_time'], 
                    s['open_time']
                ) for s in sessions
            ]
            
            # 执行批量插入
            cursor.executemany(sql, data_to_insert)
            
        connection.commit()
        print(f"Successfully initialized {len(sessions)} sessions for Acey Deucey.")
    except Exception as e:
        print(f"Database Error: {e}")
        connection.rollback()
    finally:
        connection.close()

if __name__ == "__main__":
    import sys
    # 如果 Crontab 凌晨 4 点运行，生成的应该是“今天”的游戏场次
    date_arg = sys.argv[1] if len(sys.argv) > 1 else datetime.now().strftime("%Y-%m-%d")
    
    # 1. 生成数据
    game_sessions = generate_sessions(date_arg)
    
    # 2. 写入数据库
    save_to_database(game_sessions)