import pymysql
import datetime

# 数据库配置 (保持与你提供的配置一致)
db_config = {
    'host': 'localhost',
    'user': 'root',
    'password': '31031992',
    'database': 'dating_fans',
    'charset': 'utf8mb4',
    'cursorclass': pymysql.cursors.DictCursor
}

def settle_acey_deucey():
    # --- 替代 pytz 的时区处理方案 (北京时间) ---
    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 会话时区
            cursor.execute("SET time_zone = '+8:00'")
            
            # --- 第一步：查找待结算的投注 ---
            # 关联 acey_deucey_bets (b) 和 acey_deucey_sessions (s)
            # 逻辑：找出注单状态为 pending，且场次已经到开奖时间且已有结果的记录
            sql = """
                SELECT b.id, b.user_id, b.bet_amount, b.bet_choice, s.winner, b.session_id 
                FROM acey_deucey_bets b
                JOIN acey_deucey_sessions s ON b.session_id = s.session_id
                WHERE b.status = 'pending' 
                  AND s.open_time <= %s 
                  AND s.winner IS NOT NULL
            """
            cursor.execute(sql, (now,))
            records = cursor.fetchall()

            if not records:
                # 如果没有投注，也要记得把到期的场次状态改为 settled
                cursor.execute("""
                    UPDATE acey_deucey_sessions 
                    SET status = 'settled' 
                    WHERE open_time <= %s AND status = 'open'
                """, (now,))
                conn.commit()
                print(f"[{now}] No pending Acey Deucey bets. Sessions updated.")
                return

            # --- 第二步：循环处理金额 (一笔一笔处理并提交) ---
            for rec in records:
                try:
                    # 判定输赢
                    if rec['bet_choice'] == rec['winner']:
                        # 胜利：返还双倍积分 (赔率 2.0)
                        payout = float(rec['bet_amount']) * 2
                        
                        # 更新用户余额
                        cursor.execute(
                            "UPDATE users SET balance = balance + %s WHERE id = %s", 
                            (payout, rec['user_id'])
                        )
                        
                        # 更新注单状态为已结算，记录派奖金额和中奖标志
                        cursor.execute("""
                            UPDATE acey_deucey_bets 
                            SET status = 'settled', is_win = 1, payout_amount = %s 
                            WHERE id = %s
                        """, (payout, rec['id']))
                        
                        print(f"WIN: Session {rec['session_id']} - User {rec['user_id']} won {payout}")
                    else:
                        # 失败：不加钱，仅更新注单状态
                        cursor.execute("""
                            UPDATE acey_deucey_bets 
                            SET status = 'settled', is_win = 0, payout_amount = 0 
                            WHERE id = %s
                        """, (rec['id'],))
                        
                        print(f"LOSE: Session {rec['session_id']} - User {rec['user_id']} lost")

                    # 每处理完一条注单立即提交，确保即时到账
                    conn.commit()

                except Exception as inner_e:
                    conn.rollback() # 单条处理失败回滚
                    print(f"Error processing Acey Bet ID {rec['id']}: {inner_e}")

            # --- 第三步：最后更新场次状态 ---
            cursor.execute("""
                UPDATE acey_deucey_sessions 
                SET status = 'settled' 
                WHERE session_id IN (SELECT DISTINCT session_id FROM (
                    SELECT session_id FROM acey_deucey_sessions WHERE open_time <= %s
                ) as tmp)
            """, (now,))
            conn.commit()

            print(f"[{now}] Acey Deucey Settlement Done. Processed {len(records)} bets.")

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

if __name__ == "__main__":
    settle_acey_deucey()