import pymysql
import sys
from datetime import datetime
import pytz

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

def start_settle():
    # 1. 强制获取北京时间（东八区）
    bj_tz = pytz.timezone('Asia/Shanghai')
    local_now = datetime.now(bj_tz).replace(tzinfo=None)
    
    print(f"==================================================")
    print(f"【诊断信息】Python 强制识别的北京时间为: {local_now.strftime('%Y-%m-%d %H:%M:%S')}")
    print(f"==================================================")

    connection = pymysql.connect(**db_config)
    try:
        with connection.cursor() as cursor:
            # --- 核心修改：强制将当前 MySQL 连接的时区设置为东八区 ---
            cursor.execute("SET time_zone = '+08:00'")
            # -----------------------------------------------------

            # 再次打印 MySQL 内部的 NOW()，此时它应该已经和 Python 时间同步了
            cursor.execute("SELECT NOW()")
            db_now = cursor.fetchone()[0]
            print(f"【诊断信息】校准后 MySQL 内部的 NOW() 时间为: {db_now}")
            
            # 使用北京时间作为参数查询
            sql_find = """
            SELECT v.id, v.uid, v.points, v.option_value, g.winner, g.open_time
            FROM votes v
            INNER JOIN game_results g ON v.session_id = g.session_id
            WHERE v.is_settled = 0 
            AND g.open_time <= %s
            """
            
            cursor.execute(sql_find, (local_now,))
            pending_votes = cursor.fetchall()

            if not pending_votes:
                print("【结果】依然没有到达结算时间的待处理订单。")
                print("【排查建议】如果上面两个诊断时间都一样了，但还是没有订单，请去数据库手动确认 `game_results` 表里的 `open_time` 到底写的是几点（比如它是不是被误写成了 07:45 这样的小时数）。")
                return

            print(f"【成功】成功抓取到 {len(pending_votes)} 条待结算订单，开始处理...")

            for vote_id, uid, points, user_choice, winner, open_time in pending_votes:
                # 判断是否中奖
                if user_choice == winner:
                    payout = float(points) * 1.2
                    cursor.execute("UPDATE users SET balance = balance + %s WHERE id = %s", (payout, int(uid)))
                    print(f" 订单 {vote_id} | 用户 {uid} 中奖，派彩: {payout} (开奖时间: {open_time})")
                else:
                    print(f" 订单 {vote_id} | 用户 {uid} 未中奖 (开奖时间: {open_time})")

                # 标记该票已处理
                cursor.execute("UPDATE votes SET is_settled = 1 WHERE id = %s", (vote_id,))

            # 统一提交事务
            connection.commit()
            print(f"本轮结算完成，成功处理了 {len(pending_votes)} 条记录！")

    except Exception as e:
        connection.rollback()
        print(f"发生错误: {e}")
    finally:
        connection.close()

if __name__ == "__main__":
    start_settle()