import pymysql
import datetime

# 数据库配置
db_config = {
    'host': 'localhost',
    'user': 'root',
    'password': '31031992',
    'database': 'dating_fans',
    'charset': 'utf8mb4',
    'cursorclass': pymysql.cursors.DictCursor
}

def settle_dragon_tiger():
    # --- 北京时间处理 (UTC+8) ---
    bj_time_obj = datetime.datetime.utcnow() + datetime.timedelta(hours=8)
    now = bj_time_obj.strftime('%Y-%m-%d %H:%M:%S')
    
    conn = pymysql.connect(**db_config)
    try:
        with conn.cursor() as cursor:
            # 强制设置 MySQL 会话时区为北京时间，确保与 open_time 对比准确
            cursor.execute("SET time_zone = '+8:00'")
            
            # --- 第一步：将到期的场次状态从 open 改为 settled ---
            cursor.execute("""
                UPDATE dt_sessions 
                SET status = 'settled' 
                WHERE open_time <= %s AND status = 'open'
            """, (now,))
            affected_sessions = cursor.rowcount
            if affected_sessions > 0:
                conn.commit()
                print(f"[{now}] 激活并结算了 {affected_sessions} 个新场次")

            # --- 第二步：查找待结算的注单 ---
            # 逻辑：注单 pending，且场次已设为 settled
            sql = """
                SELECT b.id, b.user_id, b.bet_amount, b.bet_choice, s.winner, b.session_id 
                FROM dt_bets b
                JOIN dt_sessions s ON b.session_id = s.session_id
                WHERE b.status = 'pending' 
                  AND s.status = 'settled'
                  AND s.winner IS NOT NULL
            """
            cursor.execute(sql)
            records = cursor.fetchall()

            if not records:
                print(f"[{now}] No pending Dragon-Tiger bets.")
                return

            # --- 第三步：循环处理派奖 (逐条处理确保安全) ---
            for rec in records:
                try:
                    bid = rec['id']
                    uid = rec['user_id']
                    choice = rec['bet_choice']
                    winner = rec['winner']
                    amount = float(rec['bet_amount'])
                    
                    is_win = 1 if choice == winner else 0
                    payout = 0.0
                    
                    if is_win:
                        # 赔率逻辑：和局 1:8，龙虎 1:1
                        rate = 8.0 if winner == 'Tie' else 1.0
                        payout = amount + (amount * rate)
                        
                        # 更新用户余额
                        cursor.execute(
                            "UPDATE users SET balance = balance + %s WHERE id = %s", 
                            (payout, uid)
                        )
                    
                    # 更新注单状态
                    cursor.execute("""
                        UPDATE dt_bets 
                        SET status = 'settled', is_win = %s, bet_amount = %s 
                        WHERE id = %s
                    """, (is_win, payout, bid))
                    
                    # 每一条注单处理完立即提交事务，防止批量失败
                    conn.commit()
                    print(f"SETTLED: Session {rec['session_id']} - User {uid} {'WIN '+str(payout) if is_win else 'LOSE'}")

                except Exception as inner_e:
                    conn.rollback()
                    print(f"Error processing Bet ID {rec['id']}: {inner_e}")

            print(f"[{now}] Dragon Tiger Settlement Done. Total: {len(records)} bets.")

    except Exception as e:
        if conn: conn.rollback()
        print(f"DT System Error: {e}")
    finally:
        if conn: conn.close()

if __name__ == "__main__":
    settle_dragon_tiger()